sql >> Databasteknik >  >> NoSQL >> MongoDB

meteorfråga för alla dokument med unikt fält

Det finns en allmän inställning som du kan använda för att komma åt det underliggande drivrutinsamlingsobjektet och därför .aggregate() utan att installera några andra plugins.

Den grundläggande processen går till så här:

FooAges = new Meteor.Collection("fooAges");

Meteor.publish("fooAgeQuery", function(args) {
    var sub = this;

    var db = MongoInternals.defaultRemoteCollectionDriver().mongo.db;

    var pipeline = [
        { "$group": {
            "_id": "$age", 
            "name": { "$max": "$name" }
        }}
    ];

    db.collection("foo").aggregate(        
        pipeline,
        // Need to wrap the callback so it gets called in a Fiber.
        Meteor.bindEnvironment(
            function(err, result) {
                // Add each of the results to the subscription.
                _.each(result, function(e) {
                    // Generate a random disposable id for aggregated documents
                    sub.added("fooAges", Random.id(), {
                        "age": e._id,
                        "name": e.name
                    });
                });
                sub.ready();
            },
            function(error) {
                Meteor._debug( "Error doing aggregation: " + error);
            }
        )
    );

});

Så du definierar en samling för utdata från aggregeringen och inom en rutin som denna publicerar du sedan tjänsten som du också ska prenumerera på i din klient.

Inuti denna körs aggregeringen och fylls i den andra samlingen (logiskt eftersom det faktiskt inte skriver någonting). Så du använder sedan den samlingen på klienten med samma definition och alla aggregerade resultat returneras bara.

Jag har faktiskt ett fullständigt fungerande exempel på en liknande process inom denna fråga , samt användning av aggregatet för meteorhack paket på denna fråga här också, om du behöver ytterligare referens.




  1. Hur man återanvänder en mongo-anslutning med löften

  2. Det gick inte att lösa löftesavvisning och skicka array som svar

  3. Spark - Hur skapar man en variabel som är olika för varje exekutorkontext?

  4. Det gick inte att ansluta till MongoLab auth fails-fel