Comme il y a beaucoup de confusion sur interroge une collection MongoDB avec des sous-documents J'ai pensé qu'il valait la peine d'expliquer les réponses ci-dessus avec des exemples :
Tout d'abord, j'ai inséré seulement 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 devrait être un car ces requêtes pour des documents où headers
égal à l'objet {From: "reservations@marriott.com"}
ou nous devons spécifier le sous-document entier comme valeur d'un champ.
Donc, selon la réponse de @Edmondo1984
Les correspondances d'égalité à l'intérieur des sous-documents sélectionnent les documents si le sous-document correspond à l'un des critères suivants exactement le sous-document spécifié, y compris l'ordre des champs. .
À partir des déclarations 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 changions l'ordre des From
y To
c'est-à-dire les mêmes que les sous-documents des seconds documents ?
> db.messages.find({headers: {From: "reservations@marriott.com", To: "kprasad.iitd@gmail.com"} }).count()
1
donc, il correspond exactement le 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 permettront à quelqu'un d'y voir plus clair sur recherche d'une requête avec des sous-documents .