sql >> Databáze >  >> NoSQL >> MongoDB

Počítání agregace vnořených objektů MongoDB

Musíte zpracovat $unwind při práci s poli a musíte to udělat třikrát:

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

V ideálním případě chcete filtrovat svůj vstup. Možná to uděláte pomocí $match před i po zpracování $unwind a pomocí $regex pro spárování dokumentů, kde data v bodě začínají "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 }
     }}
 ])

Všimněte si, že ve všech případech jsou položky s předponou „dolar $“ „proměnné“ odkazující na vlastnosti dokumentu. Toto jsou "hodnoty" pro použití vstupu na pravé straně. "Klíče" na levé straně musí být zadány jako klíč s jednoduchým řetězcem. K pojmenování klíče nelze použít žádnou proměnnou.




  1. Jak získat databázi Mongo specifikovanou v připojovacím řetězci v C#

  2. Node.js slibuje s mongoskin

  3. Jak aktualizovat a upsert více dokumentů v MongoDB pomocí C# Drivers

  4. Jak převést pohled MongoDB na sbírku