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

Wiele operacji grupowych przy użyciu platformy agregacji Mongo

Ważne jest, aby zrozumieć, że operacje w argumencie agregacji() tworzą potok . Oznaczało to, że dane wejściowe do dowolnego elementu potoku to strumień dokumentów wytworzony przez poprzedni element potoku.

W twoim przykładzie pierwsze zapytanie tworzy potok dokumentów, które wyglądają tak:

{
    "_id" : 2,
    "avg_score" : 5.5
},
{
    "_id" : 1,
    "avg_score" : 4
}

Oznacza to, że drugim elementem pipline jest seria dokumentów, w których jedynymi kluczami są „_id” i „avg_score”. Klucze „category_id” i „score” już nie istnieją w tym strumieniu dokumentów.

Jeśli chcesz dalej agregować w tym strumieniu, musisz agregować przy użyciu kluczy widocznych na tym etapie potoku. Ponieważ chcesz uśrednić średnie, musisz wprowadzić jedną stałą wartość w polu _id, aby wszystkie dokumenty wejściowe zostały zgrupowane w jeden wynik.

Poniższy kod daje poprawny wynik:

db.questions.aggregate(
    { $group : {
        _id : "$category_id",
        avg_score : { $avg : "$score" },
        }
    },
    { $group : {
        _id : "all",
        avg_score : { $avg : "$avg_score" },
        }
    }
);

Po uruchomieniu generuje następujące dane wyjściowe:

 {
    "result" : [
        {
        "_id" : "all",
        "avg_score" : 4.75
        }
    ],
    "ok" : 1
 }



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jaki jest czysty sposób na zatrzymanie Mongod w systemie Mac OS X?

  2. Jak mogę wysłać zapytanie do mongodb za pomocą mongoid/rails bez przekroczenia limitu czasu?

  3. Zwracanie elementów tablicy wewnętrznej z wielu dokumentów w posortowanej formie

  4. Graficzne bazy danych a dokumentowe bazy danych a potrójne magazyny

  5. Mongoose:ścieżka błędu walidacji jest wymagana