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

MongoDB busca cada dict en la lista en la colección

Si bien se menciona que efectivamente el $and no se requiere operador, en cualquier forma esta no es la consulta que desea. Considere lo siguiente:

db.user.find_one({ 'names.firstName': 'alice','names.lastName': 'jones' })

Esto de hecho coincida con el registro dado ya que hay ambos elementos con valores de "firstName" igual a "alice" y "lastName" igual a "jones". Pero, por supuesto, el problema aquí es simple, ya que no hay ningún elemento real en la matriz que tenga un subdocumento para ambos valores.

Para hacer coincidir el lugar donde un elemento de matriz contiene "ambos" criterios dados, debe usar $elemMatch operador. Esto aplica la condición de consulta a los "elementos" de la matriz.

db.user.find_one({ 
    'names': { '$elemMatch': { 'firstName': 'alice','lastName': 'smith' }
})

Y, por supuesto, si intentaste "alice" y "jones", eso no coincidiría, ya que ningún elemento contiene esa operación.