MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Passendes Array-Element auswählen und ausgewählte Felder zurückgeben

Wenn Sie nur bestimmte Felder eines Arrays für die Rückgabe auswählen möchten, sprechen Sie von einer "Umgestaltung" des Dokuments. Für alles, was über die „einfache“ Feldauswahl hinausgeht, bedeutet dies die Verwendung von .aggregate() als Methode statt .find() .

Die beiden Anforderungen hier sind also $filter auf dem Array-Inhalt zum „Abgleichen“ und Zurückgeben sowie $map die eigentlichen "zurückzugebenden Felder" aus dem Array selbst:

User.aggregate([
  { "$match": { "children.name": "def" } },
  { "$project": {
     "name": 1,
     "children": {
       "$map": {
         "input": {
           "$filter": {
             "input": "$children",
             "as": "c",
             "cond": { "$eq": [ "$$c.name", "def" ] } 
           }
         },
         "as": "c",
         "in": {
           "age": "$$c.age",
           "height": "$$c.height"
         }
       }
     }
  }}
])

Hier $filter wird verwendet, um den Inhalt des Arrays auf diejenigen zu reduzieren, die der Bedingung entsprechen. Das sind diejenigen, die den gleichen "name" haben Eigenschaft als Wert "def" . Dieser wird dann als "input" übergeben Parameter zu $map .

Der $map Der Operator funktioniert genauso wie seine Gegenstücke in anderen Sprachen, indem er "Arrays umformt", um etwas entsprechend dem zurückzugeben, was Sie in "in" angeben Parameter. Hier benennen wir also eigentlich nur explizit die Eigenschaften und verwenden deren Variablenzuweisungen für das aktuell verarbeitete Array-Element, sodass diese als "neuer" Array-Inhalt zurückgegeben werden.

Das Gesamtergebnis ist ein Array, das Folgendes enthält:

  1. Nur die Artikel, die den angegebenen Bedingungen entsprechen.
  2. Nur die Felder, die für die Rückgabe angegeben wurden.