sql >> Database teknologi >  >> NoSQL >> MongoDB

Sådan laver du mongo-gruppe på Meteor-serversiden

Fra Meteor v1.0.4:

Så du kan kalde collection.rawCollection() for at hente det underliggende samlingsobjekt:

var rawCollection = Orders.rawCollection();

Denne rawCollection har en metode group hvilket svarer til group metode i MongoDB-skallen. Den underliggende node API er dog asynkron, så du vil på en eller anden måde konvertere den til en synkron funktion. Vi kan ikke bruge Meteor.wrapAsync direkte siden group tager funktionsargumenter, der ikke er det primære tilbagekald, så vi løser dette med en indpakning:

function ordersGroup(/* arguments */) {
    var args = _.toArray(arguments);
    return Meteor.wrapAsync(function (callback) {
        rawCollection.group.apply(rawCollection, args.concat([callback]));
    })();
}

Inde i din metode kan du kalde ordersGroup ligesom du ville db.orders.group i Mongo-skallen. Argumenterne sendes dog separat i stedet for i et objekt:

ordersGroup(keys, condition, initial, reduce[, finalize[, command[, options]]])

For flere oplysninger, se denne dokumentation (selvom bemærk, at callback parameter bør udelades, da vores async-wrapping tager sig af det).

Så du skal sende dem separat:

var result = ordersGroup(
    // keys
    function(doc) {
        return { year: doc.createdAt.toISOString().substring(0, 4) };
    },

    // condition
    {createdAt: {$lt: new Date("2015-12-31"), $gt: new Date("2015-01-01")}},

    // initial
    {months: {}},

    // reduce
    function(order, result) {
        var month = order.createdAt.getMonth()+1,
            date = order.createdAt.getDate();

        month = result.months[month] || (result.months[month] = {});
        date = month[date] || (month[date] = []);
        date.push(order);
    }
);

Dette virker selvfølgelig kun på serveren, så sørg for, at din metode er i server-kun kode (helst i server undermappe eller inde i en if (Meteor.isServer) ).




  1. Hvordan kan jeg få datahenvisning fra en samling til en anden? Mongodb

  2. Import af domæneklasser fra GORM-standalone-modul til Grails

  3. PyMongo og multiprocessing:ServerSelectionTimeoutError

  4. Hvordan kan jeg liste alle samlinger i MongoDB-skallen?