sql >> Database >  >> NoSQL >> MongoDB

MongoDB aggregatie van geneste objecten

U moet $unwind verwerken wanneer u met arrays werkt, en u moet dit drie keer doen:

 db.collection.aggregate([

     // Un-wind the array's to access filtering 
     { "$unwind": "$studies" },
     { "$unwind": "$studies.samples" },
     { "$unwind": "$studies.samples.formdata" },

     // Group results to obtain the matched count per key
     { "$group": {
         "_id": "$studies.samples.formdata.GT",
         "count": { "$sum": 1 }
     }}
 ])

Idealiter wilt u uw invoer filteren. Doe dit eventueel met een $match zowel voor als nadat $unwind is verwerkt en met behulp van een $regex om documenten te matchen waarvan de gegevens op het punt beginnen met een "1".

 db.collection.aggregate([

     // Match first to exclude documents where this is not present in any array member
     { "$match": { "studies.samples.formdata.GT": /^1/ } },

     // Un-wind the array's to access filtering 
     { "$unwind": "$studies" },
     { "$unwind": "$studies.samples" },
     { "$unwind": "$studies.samples.formdata" },

     // Match to filter
     { "$match": { "studies.samples.formdata.GT": /^1/ } },

     // Group results to obtain the matched count per key
     { "$group": {
         "_id": {
              "_id": "$_id",
              "key": "$studies.samples.formdata.GT"
         },
         "count": { "$sum": 1 }
     }}
 ])

Merk op dat in alle gevallen de voorvoegsels "dollar $" de "variabelen" zijn die verwijzen naar eigenschappen van het document. Dit zijn "waarden" om een ​​invoer aan de rechterkant te gebruiken. De "toetsen" aan de linkerkant moeten worden opgegeven als een gewone tekenreekssleutel. Er kan geen variabele worden gebruikt om een ​​sleutel een naam te geven.




  1. Hoe kan ik gesorteerde array terug opslaan naar MongoDB?

  2. Concat-reeks per groep

  3. Hoe de telwaarde te krijgen met $lookup in mongodb met golang?

  4. NodeJS Server loopt vast bij zoekquery van MongoDB bij gelijktijdige verzoeken