sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB:Bruger match med inputdokumentvariabler

Betyder det, at hvis du bruger inputvariabler i en $lookuppipeline, skal du bruge $expr

Ja korrekt, som standard i filtre, dvs. i filterdelen af ​​.find() eller i $match aggregeringsstadiet kan du ikke bruge et eksisterende felt i dokumentet.

Hvis du overhovedet skal bruge eksisterende felts værdi i dit forespørgselsfilter, så skal du bruge aggregeringspipeline, så for at bruge aggregeringspipeline i .find() eller i $match du skal pakke din filterforespørgsel med $expr. Samme måde at få adgang til lokale variabler blev oprettet ved hjælp af let af $lookup filtrer i $match skal ombrydes af $expr .

Lad os se på nedenstående eksempel:

Eksempel på dokumenter:

[ { "key":1, "value":2 }, { "key":2, "value":4 }, { "key":5, "value":5 }]

Forespørgsel:

 db.collection.find({ nøgle:{ $gt:1 }, værdi:{ $gt:4 } }) Eller db.collection.aggregate([ { $match:{ key:{ $gt :1 }, værdi:{ $gt:4 } } ]) 

Test: mongolegeplads

Hvis du ser ovenstående forespørgsel, skal du både indtaste 1 &4 sendes ind i forespørgslen, men det tjekker du nedenstående forespørgsel, hvor du prøver at matche nøgle felt ==værdi felt - det virker ikke :

db.collection.aggregate([ { $match:{ key:{ $eq:"$value" } } ]) 

Test: mongolegeplads

Når du sammenligner to eksisterende felter ovenfor, kan du ikke gøre det, da det betyder, at du søger efter dokumenter med nøgle feltværdi som streng "$værdi" . Så for at sige, at det ikke er en streng, er det faktisk en reference til værdi felt skal du bruge $eq aggregeringsoperator i stedet for $eq forespørgselsoperator som nedenfor:

 db.collection.aggregate([ { $match:{ $expr:{ $eq:[ "$key", "$value" ] } } ]) 

Test: mongolegeplads



  1. importerer JSON til mongoDB ved hjælp af pymongo

  2. MongoDB-relationer:indlejring eller reference?

  3. mongodb - Find dokument med nærmeste heltalsværdi

  4. Installation af Memcached på Debian 9