sql >> Database >  >> NoSQL >> MongoDB

MongoDB aggregatie- en groeperingsprobleem in MeteorJS

Als u de meteor hacks-aggregaat gebruikt pakket om een ​​.aggregate() . te implementeren commando op uw verzameling, dan zal het alleen als reactie een array retourneren. Dus je moet dat verwerken in een vorm van een gepubliceerde collectie:

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

Of om de false . op te nemen telt zoals uw voorgestelde uitvoer zichzelf voorstelt:

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

Als de pijplijn met een $cond evaluatie om te zetten in numeriek.

Waar je in de basisaggregatie gewoon de overeenkomende resultaten "optellen" en natuurlijk de $sort verwijst naar een veld dat aanwezig is in de uitvoer, wat volgens uw voorbeeld de waarde "userId" zou zijn die nu in de _id staat sleutel uit aggregatie, maar kan indien gewenst ook worden "geteld" op volgorde van het totale aantal.

Dat deel produceerde de fout, zoals $sort is een huidig ​​veld en geen veldwaarde met $ notatie.

Maar om als client toegankelijke collectie te publiceren, moet u natuurlijk de daadwerkelijke _id . vervangen met iets verwacht. Dus het genereren van willekeurige ID's werkt hier, net als het opnemen van de andere velden.

Voor een beetje meer detail, en ook een alternatief voor het "hacks"-pakket dat gewoon werkt met een vanille-installatie, is er ook dit antwoord door mijzelf die een volledige lijst als voorbeeld heeft.




  1. Mongodb-schemaontwerp

  2. NodeJS callback na meerdere async-functies in for-loop

  3. Embedded Redis voor Spring Boot

  4. MongoDB best practice voor verwijzingen