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

Mongodb Aggregiertes komplexes Dokument mit verschachtelten Lookups

Sie haben $unwind ausgeführt zweimal, also müssen Sie zwei $group verwenden .

{
  $group: {
    _id: {
      secId: "$_id",
      fId: "$Sections.id"
    },
    Type: {
      $first: "$Type"
    },
    Name: {
      $first: "$Name"
    },
    Header: {
      $first: "$Sections.Header"
    },
    fieldItems: {
      $push: "$Sections.FieldItems"
    }
  }
},
{
  $group: {
    _id: "$_id.secId",
    Type: {
      $first: "$Type"
    },
    Name: {
      $first: "$Name"
    },
    Sections: {
      $push: {
        id: "$_id.fId",
        Header: "$Header",
        fieldItems: "$fieldItems"
      }
    }
  }
}
  1. Erste Gruppe - um untergeordnete Objekte zu gruppieren. Aber Typ, Name und Header müssen auf übergeordnetes bzw. untergeordnetes Array gesetzt werden.
  2. Zweite Gruppe - um übergeordnete Objekte zu gruppieren. Wir erhalten alle eigenständigen Felder, während wir das Kind gruppieren. Hier müssen wir es nur in der richtigen Reihenfolge einrichten.

Arbeiten am Mongo-Spielplatz

Hinweis:Wenn Sie $lookup verwenden , wird ein Array bereitgestellt. Aber es gibt einige Stellen, an denen Sie es einfach als Objekt machen. Ich weiß nicht, ob Sie in einer Eins-zu-eins-Beziehung beitreten oder nicht. In diesem Fall können Sie den Positionsoperator in der Projektion verwenden oder arrayElemAt