J'ai un problème lors de l'interrogation de mongoDB avec la notation d'objets imbriqués:
db.messages.find( { headers : { From: "[email protected]" } } ).count()
0
db.messages.find( { 'headers.From': "[email protected]" } ).count()
5
Je ne vois pas ce que je fais mal. Je m'attends à ce que la notation d'objet imbriqué renvoie le même résultat que la requête de notation par points. Où ai-je tort?
conditions['some.path'] = 'value'
dans ma logique métier, puis lancer une seule requête à la fin:find(conditions, fields, callback);
domains.domain.com
. Existe-t-il une solution de contournement pour ce scénario (sans modifier le domaine.com par autre chose, par exemple domain_com)?Les deux mécanismes de requête fonctionnent de différentes manières, comme suggéré dans les documents de la section Sous - documents :
Lorsque le champ contient un document incorporé (c'est-à-dire un sous - document ), vous pouvez soit spécifier le sous-document entier comme valeur d'un champ, soit «atteindre» le sous - document à l' aide de la notation par points, pour spécifier les valeurs des champs individuels du sous - document :
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 dans lesquels la valeur du producteur de champs est un sous-document qui contient uniquement le champ
company
avec la valeur'ABC123'
et le champaddress
avec la valeur'123 Street'
, dans l'ordre exact:la source
Puisqu'il y a beaucoup de confusion sur les requêtes de collecte MongoDB avec des sous-documents , j'ai pensé qu'il valait la peine d'expliquer les réponses ci-dessus avec des exemples:
D'abord, je n'ai inséré que deux objets dans la collection à savoir:
message
comme:Il doit en être un car ces requêtes de documents sont
headers
égales à l'objet{From: "[email protected]"}
, c'est-à-dire qu'elles ne contiennent aucun autre champ ou nous devons spécifier le sous-document entier comme valeur d'un champ.Donc, selon la réponse de @ Edmondo1984
D'après les instructions ci-dessus, quel devrait être le résultat de la requête ci-dessous?
Et si nous modifions l'ordre des sous-documents des deuxièmes documents, c'est-à
From
-To
dire les mêmes?Pour l'utilisation de l'opérateur point, je pense que c'est très clair pour tout le monde. Voyons le résultat de la requête ci-dessous:
J'espère que ces explications avec l'exemple ci-dessus rendront quelqu'un plus clair sur la recherche de requête avec des sous-documents .
la source