sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB Aggregate &Grouping Issue i MeteorJS

Om du använder meteorhackaggregatet paket för att implementera en .aggregate() kommandot på din samling, så returnerar den bara en array som svar. Så du måste arbeta det till en form av en publicerad samling:

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();
});

Eller för att inkludera false räknas som din föreslagna utdata antyder sig själv:

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

Som pipeline med en $cond utvärdering för att konvertera till numerisk.

Där i den grundläggande sammanställningen du bara "totalar" de matchade resultaten och naturligtvis $sort hänvisar till ett fält som finns i utgången, som i ditt exempel skulle vara värdet "userId" nu i _id nyckel från aggregering, men kan också "räknas" efter beställning efter det totala antalet om så önskas.

Den delen skapade felet, som $sort är ett aktuellt fält och inte ett fältvärde med $ notation.

Men för att publicera som en klienttillgänglig samling måste du naturligtvis ersätta det faktiska _id med något förväntat. Så slumpmässig id-generering fungerar här, liksom inkluderingen av de andra fälten.

För lite mer detaljer, och även ett alternativ till "hacks"-paketet som bara fungerar med en vaniljinstallation, finns det också det här svaret av mig själv som har en komplett lista som exempel.




  1. Installera Apache CouchDB på CentOS 7

  2. Komma igång med MongoDB och Mongoose

  3. Arbetar med @cache_page() dekoratör i django-redis-cache

  4. Autentisering misslyckades när flask_pymongo användes