MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Zliczanie agregacji obiektów zagnieżdżonych MongoDB

Musisz przetworzyć $unwind podczas pracy z tablicami i musisz to zrobić trzy razy:

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

Idealnie chcesz filtrować swoje dane wejściowe. Ewentualnie zrób to za pomocą $match zarówno przed, jak i po przetworzeniu $unwind i przy użyciu $regex aby dopasować dokumenty, w których dane w punkcie zaczynają się od „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 }
     }}
 ])

Zauważ, że we wszystkich przypadkach wpisy z przedrostkiem „dolar $” są „zmiennymi” odnoszącymi się do właściwości dokumentu. Są to „wartości” do wykorzystania danych wejściowych po prawej stronie. „Klucze” po lewej stronie muszą być określone jako zwykły ciąg znaków. Żadna zmienna nie może być użyta do nazwania klucza.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Zapytanie wiersza poleceń w Javie

  2. Indeksowanie MongoDB a implementacja tablicy dla naszej konkretnej aplikacji

  3. PyMongo podnosi [errno 49] nie może przypisać żądanego adresu po dużej liczbie zapytań

  4. Jak mogę połączyć się z MongoDB Atlas za pomocą Robomongo?

  5. MongoDB DBRef O USUWANIU KASKADY