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.