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

Especificar vários critérios para elementos de matriz


Para entender o que a documentação está dizendo, primeiro você precisa entender como funciona a consulta de intervalo com matriz.

Suponha que você tenha o seguinte documento em sua coleção:
{ "finished" : [ 27, 3 ] },
{ "finished" : 17 }

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

Retornará apenas o documento onde "finished" for um array. Isso ocorre porque $elemMatch O operador corresponde apenas a documentos em que o campo é uma matriz e em que um único elemento atende a todos os critérios de consulta.

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

retornará ambos os documentos, o que provavelmente não é o que você deseja como 27 é maior que 20 e 3 é menor que 15 . Isso ocorre porque 27 corresponde ao primeiro critério e 3 o segundo. Esse comportamento é o que é mencionado na documentação.

...um elemento pode satisfazer a condição maior que 15 e outro elemento pode satisfazer a condição menor que 20, ou um único elemento pode satisfazer ambos:

Conclusão:


As consultas de intervalo em matrizes corresponderão a um ou vários elementos na matriz que correspondam a todos os critérios de consulta.

Lição:


Não use consulta de intervalo com matrizes. Você obterá resultado inesperado.