2017-01-03 2 views
2

ich eine Dokumentstruktur haben, die wie folgt aussieht:Mongo: Abfrage für Dokumente basierend auf verschachtelte Array-Länge

{ 
key1:value1, 
key2:value2, 
key3: [ 
    index0: objectID(...), 
    index1: [ 
      index0: objectID(...) 
     ] 
     ] 
} 

Ich weiß, dass Sie Arrays mit Mongo Punktnotation zugreifen können, aber ich versuche, eine Abfrage zu erstellen, die Wählt nur alle Datensätze aus, bei denen die Länge von key3.index1 größer als Null ist.

Alle Dokumente in dieser Sammlung haben key3 und key3 wird immer ein Array bei index1 haben. In einigen Fällen ist dieses Array nicht leer.

Bisher habe ich so etwas versucht: db.collection.find({$where: "this.key3.1.length > 0"}) aber das funktioniert nicht.

Wie kann ich Dokumente mit der Länge eines verschachtelten Arrays abfragen?

EDIT: Beispieldaten

{ 
    "_id" : ObjectId("57c98fe77fe6f8009401b5d7"), 
    "arrayOfData" : [ 
     ObjectId("57c98fe87fe6f8009401b5d8"), 
     [ 
      ObjectId("57c98fe87fe6f8009401b5d9") 
     ] 
    ] 
} 

Die oben ist der relevante Ausschnitt aus der Dokumentstruktur. Alle Dokumente haben dies, in einigen Fällen ist das verschachtelte Array leer, in einigen Fällen wird es nicht.

Antwort

0

Sie können so etwas versuchen.

$ size mit $ nicht die Länge des Arrays zu berechnen und wählen Sie das Dokument, das nicht die Länge von Null haben.

db.collection.find({"key3.index1": { $not: { $size: 0} }}); 
+0

Vielen Dank für Ihre Antwort. Die obige Abfrage funktioniert nicht ganz wie gewünscht. Es berücksichtigt weiterhin index0 von Schlüssel 3 statt nur index1, sodass die ausgewählten Dokumente falsch sind. – mc1123

+0

Es tut? Das klingt nicht so. Ich verweise nur Index 1 in der Abfrage. Könnten Sie ein Beispieldokument hinzufügen, das Sie mit dieser Abfrage testen? – Veeram

+0

hinzugefügt relevantes Snippet der Dokumentstruktur – mc1123

Verwandte Themen