Da die Abfrage der MongoDB-Sammlung mit Unterdokumenten sehr verwirrend ist , hielt ich es für sinnvoll, die obigen Antworten anhand von Beispielen zu erläutern:
Zuerst habe ich nur zwei Objekte in die Sammlung eingefügt, nämlich: message
als:
> 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"
}
}
>
Was ist das Ergebnis der Abfrage: db.messages.find({headers: {From: "reservations@marriott.com"} }).count()
Dies sollte einer sein, da diese Abfragen für Dokumente nur headers
dem Objekt entsprechen {From: "reservations@marriott.com"}
, dh keine anderen Felder enthalten, oder wir sollten das gesamte Unterdokument als Wert eines Felds angeben.
Also gemäß der Antwort von @ Edmondo1984
Gleichheitsübereinstimmungen in Unterdokumenten Wählen Sie Dokumente aus, wenn das Unterdokument genau mit dem angegebenen Unterdokument übereinstimmt , einschließlich der Feldreihenfolge .
Was sollte aus den obigen Aussagen das folgende Abfrageergebnis sein?
> db.messages.find({headers: {To: "kprasad.iitd@gmail.com", From: "reservations@marriott.com"} }).count()
0
Und was ist, wenn wir die Reihenfolge From
und das To
Gleiche wie die Unterdokumente der zweiten Dokumente ändern ?
> db.messages.find({headers: {From: "reservations@marriott.com", To: "kprasad.iitd@gmail.com"} }).count()
1
Daher stimmt es genau mit dem angegebenen Unterdokument überein , einschließlich der Feldreihenfolge .
Für die Verwendung des Punktoperators denke ich, dass es für jeden sehr klar ist. Sehen wir uns das Ergebnis der folgenden Abfrage an:
> db.messages.find( { 'headers.From': "reservations@marriott.com" } ).count()
2
Ich hoffe, dass diese Erklärungen mit dem obigen Beispiel jemandem mehr Klarheit bei der Suchabfrage mit Unterdokumenten verschaffen .