sql >> Databasteknik >  >> NoSQL >> MongoDB

Ange flera kriterier för matriselement

För att förstå vad dokumentationen säger måste du först förstå hur intervallfråga med array fungerar.

Anta att du har följande dokument i din samling:

{ "finished" : [ 27, 3 ] },
{ "finished" : 17 }

Den första frågan:

db.users.find( { "finished": { "$elemMatch": { "$gt": 15, "$lt": 20 } } } )

Returnerar endast dokumentet där "finished" är en array. Detta beror på att $elemMatch operatorn matchar endast dokument där fältet är en array och där ett enda element uppfyller alla frågekriterier.

Men den andra frågan:

db.users.find( { "finished": { "$gt": 15, "$lt": 20 } } )

kommer att returnera båda dokumenten vilket förmodligen inte är vad du vill ha som 27 är större än 20 och 3 är mindre än 15 . Detta beror på att 27 matchar det första kriteriet och 3 den andra. Detta beteende är det som nämns i dokumentationen.

...ett element kan uppfylla villkoret för mer än 15 och ett annat element kan uppfylla villkoret för mindre än 20, eller ett enda element kan uppfylla båda:

Slutsats:

Områdesfrågor mot arrayer matchar så långt som ett eller flera element i arrayen som matchar alla frågekriterier.

Lektion:

Använd inte intervallfråga med arrayer. Du kommer att få oväntade resultat.



  1. MongoDB \uXXXX problem

  2. ServiceStack.Redis:Kan inte ansluta:sPort:50071

  3. MongoDB $bsonSize

  4. Effektiv personsökning i MongoDB med hjälp av mgo