MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB recherche chaque dict dans la liste de la collection

Alors qu'il est mentionné qu'en effet le $and L'opérateur n'est pas requis, dans l'une ou l'autre forme, ce n'est pas la requête que vous voulez. Considérez ce qui suit :

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

En fait, fait correspondent à l'enregistrement donné car il y a les deux éléments avec des valeurs "firstName" égales à "alice" et "lastName" égales à "jones". Mais bien sûr, le problème ici est simple en ce qu'il n'y a pas d'élément réel dans le tableau qui ait un sous-document pour ces deux valeurs.

Afin de faire correspondre où un élément de tableau contient "les deux" critères donnés, vous devez utiliser le $elemMatch opérateur. Ceci applique la condition de requête aux "éléments" du tableau.

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

Et bien sûr, si vous essayez "alice" et "jones", cela ne correspondra pas car aucun élément ne contient réellement cette opération.