Wie die Abfrage von verschachtelten Objekten?
Ich habe ein problem beim Abfragen von mongoDB mit verschachtelten Objekten notation:
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 verschachtelte Objekt-notation, um dasselbe Ergebnis zurück, als die dot-notation Abfrage. Wo bin ich falsch?
InformationsquelleAutor Edmondo1984 | 2013-04-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
db.messages.find( { headers : { From: "[email protected]" } } )
Diese Abfragen für Dokumente, wo
headers
gleich{ From: ... }
, d.h. enthält keine weiteren Felder.db.messages.find( { 'headers.From': "[email protected]" } )
Dieser sieht nur die
headers.From
Feld, nicht unabhängig von anderen Feldern aus, oder fehlt,headers
.Dot-notation docs
was für?
Ich weiß nicht, einfach Fragen, und dachte, es kann manchmal nützlich sein.
In der Praxis habe ich festgestellt, dass die Deklaration von inline-Objekten (wie in den Beispielen in mongo[ose] docs, und in die meisten Beispiele gibt) ist einfach nicht genug in der realen Welt. Ich habe die Gewohnheit entwickelt erstellen 'Bedingungen' und 'Felder' - Objekte, auf dem ich tun kann, Sachen wie
conditions['some.path'] = 'value'
in meine business-Logik ausführen einer einzelnen Abfrage am Ende:find(conditions, fields, callback);
Das ist F!@#K Toll !!!!
InformationsquelleAutor shx2
Den beiden Abfrage-Mechanismus auf unterschiedliche Weise arbeiten, wie vorgeschlagen, in die docs im Abschnitt Filialdokumente:
Wenn das Feld enthält ein eingebettetes Dokument (ich.e, Filialdokument), können Sie entweder geben Sie die gesamte Filialdokument als Wert für ein Feld, oder "reach-in" die Filialdokument über die Punkt-notation, geben Sie die Werte für die einzelnen Felder in der Filialdokument:
Gleichheit entspricht in Filialdokumente wählen Sie Dokumente, wenn das Filialdokument entspricht genau der angegebenen Filialdokument, einschließlich der Halbbild-Reihenfolge.
Im folgenden Beispiel wird die Abfrage findet alle Dokumente, in denen der Wert des Feldes Produzent ist ein Filialdokument, das enthält nur das Feld
company
mit dem Wert'ABC123'
und das Feldaddress
mit dem Wert'123 Street'
, in der exakten Reihenfolge:InformationsquelleAutor Edmondo1984
Da gibt es viel Verwirrung über Abfragen mongodb collection mit sub-Dokumente, dachte ich, seinen Wert zu erklären, die oben genannten Antworten mit Beispielen:
Ersten habe ich nur eingefügt, zwei-Objekt in der Sammlung, nämlich:
message
:Sollte es eine, weil diese Abfragen für Dokumente, wo
headers
entspricht das Objekt{From: "[email protected]"}
nur d.h. enthält keine anderen Felder oder sollten wir angeben, die gesamte sub-Dokument als Wert eines Feldes.Also-je ans von @Edmondo1984
Vom oben genannten Aussagen, was die folgenden Abfrage-Ergebnis sollte sein ?
Und was ist, wenn wir die Reihenfolge ändern, von
From
undTo
ich.e dieselbe als sub-Dokumente des zweiten Dokumente?Für die Verwendung von dot-operator, ich denke, es ist sehr klar für jeden. Mal sehen, das Ergebnis der folgenden Abfrage:
Hoffe, diese Erklärung mit Beispiel jemand mehr Klarheit über finden, die Abfrage mit sub-Dokumente.
InformationsquelleAutor krishna Prasad