MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Множество групови операции, използващи рамката за агрегиране на Mongo

Важно е да разберете, че операциите в аргумента на aggregate() образуват тръбопровод . Това означаваше, че входът към всеки елемент от конвейера е потокът от документи, създаден от предишния елемент в конвейера.

Във вашия пример първата ви заявка създава последователност от документи, които изглеждат така:

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

Това означава, че вторият елемент на конвейера вижда серия от документи, където единствените ключове са "_id" и "avg_score". Ключовете "category_id" и "score" вече не съществуват в този поток от документи.

Ако искате допълнително да агрегирате в този поток, ще трябва да агрегирате, като използвате ключовете, които се виждат на този етап в конвейера. Тъй като искате да осредните средните стойности, трябва да поставите една константна стойност за полето _id, така че всички входни документи да бъдат групирани в един резултат.

Следният код дава правилния резултат:

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

Когато се изпълнява, той произвежда следния изход:

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да намерите неизползвани индекси в MongoDB?

  2. Как да филтрирате масив в поддокумент с MongoDB

  3. Пребройте елементите на масива, които отговарят на условието

  4. MongoDB като услуга за опашка?

  5. Mongodb - Разлика между стартиране на бази данни mongo и mongod