For at forstå, hvad dokumentationen siger, skal du først forstå, hvordan rækkeviddeforespørgsel med array fungerer.
Antag, at du har følgende dokument i din samling:
{ "finished" : [ 27, 3 ] },
{ "finished" : 17 }
Den første forespørgsel:
db.users.find( { "finished": { "$elemMatch": { "$gt": 15, "$lt": 20 } } } )
Vil kun returnere dokumentet, hvor "færdig" er et array. Dette er fordi $elemMatch
operator matcher kun dokumenter, hvor feltet er et array, og hvor et enkelt element opfylder alle forespørgselskriterierne.
Men den anden forespørgsel:
db.users.find( { "finished": { "$gt": 15, "$lt": 20 } } )
vil returnere begge dokumenter, hvilket sandsynligvis ikke er, hvad du vil have som 27
er større end 20
og 3
er mindre end 15
. Dette er fordi 27
matcher de første kriterier og 3
Sekundet. Denne adfærd er, hvad der er nævnt i dokumentationen.
...et element kan opfylde betingelsen over 15, og et andet element kan opfylde betingelsen med mindre end 20, eller et enkelt element kan opfylde begge:
Konklusion:
Områdeforespørgsler mod arrays vil matche så langt som et eller flere elementer i arrayet, der matcher alle forespørgselskriterierne.
Lektion:
Brug ikke intervalforespørgsel med arrays. Du vil få et uventet resultat.