¿Cómo consultar objetos nesteds?

Tengo un problema al consultar mongoDB con notación de objetos nesteds:

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

No puedo ver lo que estoy haciendo mal. Estoy esperando que la notación de objeto nested devuelva el mismo resultado que la consulta de notación de punto. ¿Dónde estoy equivocado?

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

Esto consulta los documentos donde los headers iguales a { From: ... } , es decir, no contiene otros campos.


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

Esto solo mira los headers . Desde el campo, no se ve afectado por otros campos contenidos en, o faltantes de, headers .


Documentos de notación de punto

Los dos mecanismos de consulta funcionan de diferentes maneras, como se sugiere en los documentos en la sección Subdocumentos :

Cuando el campo contiene un documento incrustado (es decir, subdocumento ), puede especificar todo el subdocumento como el valor de un campo, o “alcanzar” el subdocumento utilizando la notación de puntos, para especificar valores para campos individuales en el subdocumento :

Igualdad coincide dentro de los subdocumentos, seleccione documentos si el subdocumento coincide exactamente con el subdocumento especificado, incluido el orden de los campos.


En el siguiente ejemplo, la consulta coincide con todos los documentos donde el valor del productor de campo es un subdocumento que contiene solo la company campo con el valor 'ABC123' y la address campo con el valor '123 Street' , en el orden exacto:

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