2017-02-15 5 views
2

db.doc.find({},{"sections.rows.Desk":1}) kehrt Schreibtische Liste, sondern auch leere Zeilen das heißt, wo Schreibtisch Attribut existiert nicht in Zeilen Array ...Filter Unter Dokument Array

Ich mag würde leer Ergebnisse beseitigen. Wie geht es?

Danke!

Mein Dokument "doc" hat das folgende Format. „docs“: {

"sections" : [ 
     { 
      "name" : "Request Details", 
      "rows" : [ 
       { 
        "Desk" : "IT4" 
       } 
      ] 
     }, 
     { 
      "name" : "Approval", 
      "rows" : [ 
       { 
        "Approval" : "" 
       } 
      ] 
     } 
    ] 
} 

Antwort

1

Sie haben die Aggregation Rahmen zu verwenden, insbesondere die $unwind Bediener in der Lage sein, die Abfrage gegen einzelne Array-Elemente und bekommen die, die Sie nach sind. Derzeit mit dem Weg .find funktioniert, erhalten Sie das gesamte Dokument, wenn es mit Ihrer Abfrage übereinstimmt.

db.docs.aggregate({$unwind: "$sections"}, {$match: {"sections.rows.Desk": {$exists: 1}}}); 
+0

Das hat funktioniert ... Danke Explosion! $ Entspannen ist cool. Meine aktuelle Arbeit befindet sich im Prototypenstadium und das Datenmodell wird wahrscheinlich tief verschachtelt und komplexer. Irgendwelche Vorschläge zu Ressourcen/Büchern, in denen ich mehr über das Abfragen komplexer Dokumente erfahren kann? – Vin

+0

@Vin nicht wirklich, nur viel üben. Ich denke, das Handbuch ist eine großartige Ressource: https://docs.mongodb.com/manual/ aber es ist offensichtlich sehr dicht, wie ein Handbuch Dokumentation wäre, so dass Sie nicht nur lesen können, aber es ist eine gute Ressource, wenn Sie suchen nach Besonderheiten. –