Comment interroger des objects nesteds?

J’ai un problème en interrogeant mongoDB avec la notation d’objects nesteds:

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

Je ne peux pas voir ce que je fais mal. Je m’attends à ce que la notation d’object nestede renvoie le même résultat que la requête de notation par points. Où est-ce que je me trompe?

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

Cette requête pour les documents où les en- headers est égale à { From: ... } , c’est-à-dire ne contient pas d’autres champs.


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

Cela ne headers.From champ headers.From , non affecté par les autres champs contenus ou manquants dans les en- headers .


Documents de notation par points

Les deux mécanismes de requête fonctionnent de différentes manières, comme le suggèrent les documents de la section Sousdocuments :

Lorsque le champ contient un document incorporé ( sousdocument , par exemple), vous pouvez spécifier le sous-document entier comme valeur d’un champ ou «accéder» au sousdocument à l’ aide de la notation par points pour spécifier des valeurs pour des champs individuels du sousdocument :

Les correspondances d’égalité dans les sous-documents sélectionnent les documents si le sous-document correspond exactement au sous-document spécifié, y compris l’ordre des champs.


Dans l’exemple suivant, la requête correspond à tous les documents dont la valeur est un sous-document contenant uniquement la company champs avec la valeur 'ABC123' et l’ address champ avec la valeur '123 Street' , dans l’ordre exact:

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