Ich habe ein Problem beim Abfragen von mongoDB mit der Notation verschachtelter Objekte:
db.messages.find( { headers : { From: "[email protected]" } } ).count()
0
db.messages.find( { 'headers.From': "[email protected]" } ).count()
5
Ich kann nicht sehen, was ich falsch mache. Ich erwarte, dass die Notation verschachtelter Objekte das gleiche Ergebnis wie die Abfrage der Punktnotation zurückgibt. Wo irre ich mich
conditions['some.path'] = 'value'
mirfind(conditions, fields, callback);
domains.domain.com
. Gibt es eine Problemumgehung für dieses Szenario (ohne die domain.com in etwas anderes zu ändern, z. B. domain_com)?Die beiden Abfragemechanismen funktionieren auf unterschiedliche Weise, wie in den Dokumenten im Abschnitt Unterdokumente vorgeschlagen :
Wenn das Feld ein eingebettetes Dokument enthält (dh ein Unterdokument ), können Sie entweder das gesamte Unterdokument als Wert eines Felds angeben oder das Unterdokument mithilfe der Punktnotation „erreichen“ , um Werte für einzelne Felder im Unterdokument anzugeben :
Gleichheitsübereinstimmungen innerhalb von Unterdokumenten wählen Dokumente aus, wenn das Unterdokument genau mit dem angegebenen Unterdokument übereinstimmt, einschließlich der Feldreihenfolge.
Im folgenden Beispiel stimmt die Abfrage mit allen Dokumenten überein, bei denen der Wert des Feldproduzenten ein Unterdokument ist, das nur das Feld
company
mit dem Wert'ABC123'
und das Feldaddress
mit dem Wert'123 Street'
in der genauen Reihenfolge enthält:quelle
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:Dies sollte einer sein, da diese Abfragen für Dokumente nur
headers
dem Objekt entsprechen{From: "[email protected]"}
, dh keine anderen Felder enthalten, oder wir sollten das gesamte Unterdokument als Wert eines Felds angeben.Also gemäß der Antwort von @ Edmondo1984
Was sollte aus den obigen Aussagen das folgende Abfrageergebnis sein?
Und was ist, wenn wir die Reihenfolge
From
und dasTo
Gleiche wie die Unterdokumente der zweiten Dokumente ändern ?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:
Ich hoffe, dass diese Erklärungen mit dem obigen Beispiel jemandem mehr Klarheit bei der Suchabfrage mit Unterdokumenten verschaffen .
quelle