Come interrogare oggetti nidificati?

Ho un problema durante l’interrogazione di mongoDB con la notazione degli oggetti nidificati:

db.messages.find( { headers : { From: "[email protected]" } } ).count() 0 db.messages.find( { 'headers.From': "[email protected]" } ).count() 5 

Non riesco a vedere cosa sto sbagliando. Mi aspetto che la notazione degli oggetti nidificati restituisca lo stesso risultato della query di notazione dei punti. Dove mi sbaglio?

db.messages.find( { headers : { From: "[email protected]" } } )

Questa query per i documenti in cui le headers uguale a { From: ... } , ovvero non contiene altri campi.


db.messages.find( { 'headers.From': "[email protected]" } )

Questo guarda solo le headers.From campo, non influenzato da altri campi contenuti in, o mancanti da, headers .


Documenti di notazione del punto

I due meccanismi di query funzionano in modi diversi, come suggerito nei documenti nella sezione Documenti secondari :

Quando il campo contiene un documento incorporato (ad esempio, documento secondario ), è ansible specificare l’intero documento secondario come valore di un campo o “raggiungere” il documento secondario utilizzando la notazione punto per specificare i valori per i singoli campi nel documento secondario :

Le corrispondenze di uguaglianza all’interno di documenti secondari selezionano i documenti se il documento secondario corrisponde esattamente al documento secondario specificato, incluso l’ordine dei campi.


Nell’esempio seguente, la query corrisponde a tutti i documenti in cui il valore del produttore del campo è un documento secondario che contiene solo la company campo con il valore 'ABC123' e l’ address del campo con il valore '123 Street' , nell’ordine esatto:

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