sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb Aggregera komplexa dokument med kapslade sökningar

Du har gjort $unwind två gånger, så du behöver använda två $group .

{
  $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. Första gruppen - för att gruppera underordnade objekt. Men Typ, namn och rubrik måste ställas in på förälder respektive underordnad array.
  2. Andra grupp - för att gruppera överordnade objekt. Vi får alla fristående fält när vi grupperar barn. Här behöver vi bara ställa in den i rätt ordning.

Fungerar Mongo lekplats

Obs :När du använder $lookup , kommer det att tillhandahålla en array. Men det finns vissa ställen du bara gör det som objekt. Jag vet inte om du går med i ett-till-en-förhållande eller inte. Om så är fallet kan du använda positionsoperator i projektion eller arrayElemAt




  1. MongoDB filtrerar flera underdokument

  2. Modellering mongodb lagrade refererade relationer i .net-kärnan

  3. I Jongo, hur man hittar flera dokument från Mongodb genom en lista med ID:n

  4. MongoDB:Beräkna uppehållstid mellan varje statusvärdeändring