sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB indlejrede objektaggregeringsoptælling

Du skal behandle $unwind når du arbejder med arrays, og du skal gøre dette tre gange:

 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 }
     }}
 ])

Ideelt set ønsker du at filtrere dit input. Gør eventuelt dette med en $match både før og efter $unwind er behandlet og ved hjælp af en $regex for at matche dokumenter, hvor dataene på punktet begynder med et "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 }
     }}
 ])

Bemærk, at præfikset "dollar $" i alle tilfælde er "variabler", der henviser til egenskaber for dokumentet. Disse er "værdier" for at bruge et input på højre side. Venstre side "nøgler" skal angives som en almindelig strengnøgle. Ingen variabel kan bruges til at navngive en nøgle.




  1. sæt feltet som tomt for mongo-objekt ved hjælp af mongoose

  2. Mongoose .find forespørgselsresultatet indeholder forespørgselsmetadata? kan man ikke bare manuelt projicere hver egenskab i samlingen, hvordan får man kun dokumentet?

  3. Træk underdokumenter fra indsamling i aggregeret pipeline

  4. MongoDB installeret via Homebrew virker ikke