Eu tenho um problema ao consultar o mongoDB com notação de objetos aninhados:
db.messages.find( { headers : { From: "[email protected]" } } ).count()
0
db.messages.find( { 'headers.From': "[email protected]" } ).count()
5
Não vejo o que estou fazendo de errado. Espero que a notação de objeto aninhado retorne o mesmo resultado que a consulta de notação de ponto. Onde eu estou errado?
conditions['some.path'] = 'value'
na minha lógica de negócios e, em seguida, executar uma única consulta no final:find(conditions, fields, callback);
domains.domain.com
. Existe alguma solução alternativa para esse cenário (sem alterar o domain.com para outra coisa, por exemplo, domain_com)?O mecanismo de duas consultas funciona de maneiras diferentes, conforme sugerido nos documentos na seção Subdocumentos :
Quando o campo contém um documento incorporado (ou seja, subdocumento ), você pode especificar todo o subdocumento como o valor de um campo ou "acessar" o subdocumento usando a notação de ponto, para especificar valores para campos individuais no subdocumento :
Correspondências de igualdade nos subdocumentos selecionam documentos se o subdocumento corresponder exatamente ao subdocumento especificado, incluindo a ordem dos campos.
No exemplo a seguir, a consulta corresponde a todos os documentos em que o valor do produtor do campo é um subdocumento que contém apenas o campo
company
com o valor'ABC123'
e o campoaddress
com o valor'123 Street'
, na ordem exata:fonte
Como há muita confusão sobre as consultas da coleção MongoDB com sub-documentos , achei que vale a pena explicar as respostas acima com exemplos:
Primeiro, inseri apenas dois objetos na coleção, a saber:
message
como:Deve ser uma porque essas consultas para documentos são
headers
iguais ao objeto{From: "[email protected]"}
, apenas, por exemplo, não contém outros campos ou devemos especificar todo o sub-documento como o valor de um campo.Então, de acordo com a resposta de @ Edmondo1984
A partir das instruções acima, qual deve ser o resultado da consulta abaixo?
E se mudarmos a ordem
From
e, por exemplo, oTo
mesmo que os sub-documentos dos segundos documentos?Para usar o operador de ponto, acho que é muito claro para todos. Vamos ver o resultado da consulta abaixo:
Espero que essas explicações com o exemplo acima tornem alguém mais claro sobre a consulta de busca com sub-documentos .
fonte