sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB kapslade objektaggregationsräkning

Du måste bearbeta $unwind när du arbetar med arrayer, och du måste göra detta tre gånger:

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

Helst vill du filtrera din input. Gör eventuellt detta med en $match både före och efter att $unwind har bearbetats och med en $regex för att matcha dokument där data vid punkten börjar med en "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 }
     }}
 ])

Observera att "dollar $"-posterna med prefix i alla fall är "variabler" som hänvisar till dokumentets egenskaper. Dessa är "värden" för att använda en ingång på höger sida. Den vänstra sidan "tangenter" måste anges som en vanlig strängnyckel. Ingen variabel kan användas för att namnge en nyckel.




  1. Hur man installerar Apache CouchDB 2.3.0 i Linux

  2. alternativ till att använda 'vänta' med lazy_static! makro i rost?

  3. inbäddat dokument vs hashdatatyp i mongoid

  4. Mongodb kraschade med Ogiltig åtkomst på adress - segmenteringsfelsignal 11 - version 2.6