MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Pesquisa do MongoDB para cada dict na lista na coleção


Embora seja mencionado que, de fato, o $and operador não é necessário, de qualquer forma esta não é a consulta que você deseja. Considere o seguinte:
db.user.find_one({ 'names.firstName': 'alice','names.lastName': 'jones' })

Isso de fato faz corresponder ao registro dado, pois há ambos os elementos com valores "firstName" iguais a "alice" e "lastName" iguais a "jones". Mas é claro que o problema aqui é simples, pois não há nenhum elemento real no array que tenha um subdocumento para ambos os valores.

Para corresponder onde um elemento de matriz contém "ambos" os critérios fornecidos, você precisa usar o $elemMatch operador. Isso aplica a condição de consulta aos "elementos" da matriz.
db.user.find_one({ 
    'names': { '$elemMatch': { 'firstName': 'alice','lastName': 'smith' }
})

E, claro, se você tentasse "alice" e "jones", isso não corresponderia, pois nenhum elemento realmente contém essa operação.