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:
> db.messages.find().pretty()
{
"_id" : ObjectId("5cce8e417d2e7b3fe9c93c32"),
"headers" : {
"From" : "reservations@marriott.com"
}
}
{
"_id" : ObjectId("5cce8eb97d2e7b3fe9c93c33"),
"headers" : {
"From" : "reservations@marriott.com",
"To" : "kprasad.iitd@gmail.com"
}
}
>
Alors, quel est le résultat de la requête: db.messages.find({headers: {From: "reservations@marriott.com"} }).count()
Il doit en être un car ces requêtes de documents sont headers
égales à l'objet {From: "reservations@marriott.com"}
, 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
L'égalité correspond dans les sous-documents sélectionnez les documents si le sous-document correspond exactement au sous-document spécifié, y compris l'ordre des champs .
D'après les instructions ci-dessus, quel devrait être le résultat de la requête ci-dessous?
> db.messages.find({headers: {To: "kprasad.iitd@gmail.com", From: "reservations@marriott.com"} }).count()
0
Et si nous modifions l'ordre des sous-documents des deuxièmes documents, c'est-à From
- To
dire les mêmes?
> db.messages.find({headers: {From: "reservations@marriott.com", To: "kprasad.iitd@gmail.com"} }).count()
1
ainsi, il correspond exactement au sous-document spécifié, y compris l'ordre des champs .
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:
> db.messages.find( { 'headers.From': "reservations@marriott.com" } ).count()
2
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 .