Per capire cosa dice la documentazione, devi prima capire come funziona la query di intervallo con array.
Supponiamo di avere il seguente documento nella tua collezione:
{ "finished" : [ 27, 3 ] },
{ "finished" : 17 }
La prima domanda:
db.users.find( { "finished": { "$elemMatch": { "$gt": 15, "$lt": 20 } } } )
Restituirà solo il documento in cui "finito" è un array. Questo perché $elemMatch
operatore trova solo documenti in cui il campo è un array e in cui un singolo elemento soddisfa tutti i criteri di query.
Ma la seconda domanda:
db.users.find( { "finished": { "$gt": 15, "$lt": 20 } } )
restituirà entrambi i documenti che probabilmente non sono ciò che desideri come 27
è maggiore di 20
e 3
è inferiore a 15
. Questo perché 27
corrisponde ai primi criteri e 3
il secondo. Questo comportamento è quello menzionato nella documentazione.
...un elemento può soddisfare la condizione maggiore di 15 e un altro elemento può soddisfare la condizione minore di 20, oppure un singolo elemento può soddisfare entrambe:
Conclusione:
Le query di intervallo rispetto agli array corrisponderanno fino a uno o più elementi nell'array che corrispondono a tutti i criteri di query.
Lezione:
Non utilizzare la query di intervallo con le matrici. Otterrai risultati inaspettati.