Como consultar objects nesteds?

Eu tenho um problema ao consultar o mongoDB com notação de objects nesteds:

db.messages.find( { headers : { From: "reservations@marriott.com" } } ).count() 0 db.messages.find( { 'headers.From': "reservations@marriott.com" } ).count() 5 

Não consigo ver o que estou fazendo errado. Espero que a notação de object nested retorne o mesmo resultado que a consulta de notação de ponto. Onde estou errado?

db.messages.find( { headers : { From: "reservations@marriott.com" } } )

Esta consulta para documentos em que os headers são iguais a { From: ... } , ou seja, não contém outros campos.


db.messages.find( { 'headers.From': "reservations@marriott.com" } )

Isso apenas analisa os headers.From campo, não é afetado por outros campos contidos ou ausentes nos headers .


Dot notação docs

Os dois mecanismos de consulta funcionam de maneiras diferentes, conforme sugerido nos documentos da seção Subdocumentos :

Quando o campo contém um documento incorporado (ou seja, subdocumento ), você pode especificar o subdocumento inteiro como o valor de um campo ou “acessar” o subdocumento usando a notação de ponto, para especificar valores para campos individuais no subdocumento :

Equality matches within subdocuments seleciona 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 de campo é um subdocumento que contém apenas a company campo com o valor 'ABC123' e o address campo com o valor '123 Street' , na ordem exata:

 db.inventory.find( { producer: { company: 'ABC123', address: '123 Street' } });