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

Проблем с агрегирането и групирането на MongoDB в MeteorJS

Ако използвате aggregate meteor hacks пакет за внедряване на .aggregate() команда на вашата колекция, тогава тя просто ще върне масив в отговор. Така че трябва да обработите това във форма на публикувана колекция:

Meteor.publish("completedLB,function() {
    var self = this;

    var results = userCompleted.aggregate([
        { "$match": { "progressState": true } },
        { "$group": {
            "_id": "$userId",
             "progressState": { "$first": "$progressState" },
             "count": { "$sum": 1 }
        }},
        { "$sort": { "_id": 1 } }
    ]);

    _.each(results,function(result) {
        self.added("client_collection_name",Random.id(), {
            userId: result._id,
            progressState: result.progressState,
            count: result.count
        });
    });
    self.ready();
});

Или да включите false се брои, тъй като вашият предложен изход се предлага сам:

        { "$group": {
            "_id": "$userId",
             "progressState": { "$first": true },
             "count": { "$sum": { "$cond": ["$progressState", 1,0] }
        }},
        { "$sort": { "_id": 1 } }

Като конвейер с $cond оценка за преобразуване в числова.

Където в основното агрегиране вие ​​просто „сумирате“ съответстващите резултати и разбира се $sort се отнася до поле, присъстващо в изхода, което според вашия пример би било стойността „userId“ сега в _id ключ от агрегиране, но може също да бъде "брой", за да се подреди по общия брой, ако желаете.

Тази част създаваше грешката като $sort е настоящо поле, а не стойност на поле с $ нотация.

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

За малко повече подробности, а също и алтернатива на пакета "hacks", който работи само с ванилова инсталация, има също този отговор от мен, който има пълен списък като пример.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Заредете spark данни в Mongo / Memcached за използване от уеб услуга

  2. MongoDB Number Field няма да вмъкне или актуализира с номера, който въвеждам

  3. Персонализирана десериализация

  4. Премахване на бели интервали (водещи и крайни) от стойността на низа

  5. Възможно ли е да се върне изчислено поле от MongoDB заявка?