sql >> Database >  >> NoSQL >> MongoDB

Mongodb Geaggregeerd complex document met geneste zoekopdrachten

Je hebt $unwind gedaan twee keer, dus je moet twee $group . gebruiken .

{
  $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. Eerste groep - om onderliggende objecten te groeperen. Maar Type, naam en kop moeten worden ingesteld op respectievelijk parent- en child-array.
  2. Tweede groep - om bovenliggende objecten te groeperen. We krijgen alle op zichzelf staande velden terwijl we kind groeperen. Hier moeten we het alleen in de juiste volgorde instellen.

Werkende Mongo-speeltuin

Opmerking:wanneer u $lookup . gebruikt , het zal een array opleveren. Maar op sommige plaatsen maak je het gewoon als object. Ik weet niet of je een een-op-een relatie hebt of niet. Als dit het geval is, kunt u de positionele operator in projectie gebruiken of arrayElemAt




  1. Hoe een gebruiker in mongodb te maken met docker-compose

  2. MongoDB Compass uitvoeren op Mac

  3. Hoe verhoog ik een Getalwaarde in Mongoose?

  4. Lengte collectie-ID in MongoDB