sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man gör mongo-grupp på Meteor-serversidan

Från och med Meteor v1.0.4:

Så du kan anropa collection.rawCollection() för att hämta det underliggande samlingsobjektet:

var rawCollection = Orders.rawCollection();

Denna rawCollection har en metod group vilket motsvarar group metod i MongoDB-skalet. Det underliggande nod-APIet är dock asynkront, så du vill konvertera det till en synkron funktion på något sätt. Vi kan inte använda Meteor.wrapAsync direkt från group tar funktionsargument som inte är den primära återuppringningen, så vi löser detta med ett omslag:

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

Inuti din metod kan du anropa ordersGroup som du skulle db.orders.group i Mongo-skalet. Men argumenten skickas separat, snarare än i ett objekt:

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

För mer information, se denna dokumentation (men observera att callback parametern bör utelämnas, eftersom vår asynkron-inpackning tar hand om det).

Så du måste skicka in 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);
    }
);

Naturligtvis fungerar detta bara på servern, så se till att din metod är i endast serverkod (helst i server underkatalog, eller i en if (Meteor.isServer) ).




  1. hämta dokumentet med $box med mongodb och lägg till avståndsfält för varje post med specifik koordinatpunkt

  2. MongoDB:slut på minne

  3. Använd LIKE/regex med variabel i mongoid

  4. Frågar med joins och filter i Mongoose