sql >> Base de Datos >  >> NoSQL >> MongoDB

Especificar múltiples criterios para elementos de matriz

Para comprender lo que dice la documentación, primero debe comprender cómo funciona la consulta de rango con matriz.

Suponga que tiene el siguiente documento en su colección:

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

La primera consulta:

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

Solo devolverá el documento donde "terminado" es una matriz. Esto se debe a que $elemMatch El operador solo coincide con documentos donde el campo es una matriz y donde un solo elemento satisface todos los criterios de consulta.

Pero la segunda consulta:

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

devolverá ambos documentos, lo que probablemente no sea lo que desea como 27 es mayor que 20 y 3 es menor que 15 . Esto se debe a que 27 coincide con el primer criterio y 3 el segundo. Este comportamiento es lo que se menciona en la documentación.

...un elemento puede satisfacer la condición mayor a 15 y otro elemento puede satisfacer la condición menor a 20, o un solo elemento puede satisfacer ambas:

Conclusión:

Las consultas de rango contra matrices coincidirán en la medida en que uno o varios elementos de la matriz coincidan con todos los criterios de consulta.

Lección:

No utilice la consulta de rango con matrices. Obtendrá un resultado inesperado.