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

Specifica più criteri per gli elementi dell'array

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.