sql >> Databáze >  >> NoSQL >> MongoDB

Jak udělat skupinu mongo na straně serveru Meteor

Od verze Meteor v1.0.4:

Můžete tedy zavolat collection.rawCollection() k získání základního objektu kolekce:

var rawCollection = Orders.rawCollection();

Tato rawCollection má metodu group což je ekvivalentní group metoda v prostředí MongoDB. Základní API uzlu je však asynchronní, takže jej budete chtít nějak převést na synchronní funkci. Nemůžeme použít Meteor.wrapAsync přímo od group přebírá argumenty funkcí, které nejsou primárním zpětným voláním, takže to vyřešíme pomocí wrapperu:

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

Uvnitř své metody můžete volat ordersGroup jako byste db.orders.group ve skořápce Mongo. Argumenty se však předávají samostatně, nikoli v objektu:

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

Další informace naleznete v této dokumentaci (ačkoli mějte na paměti, že callback parametr by měl být vynechán, protože se o to postará naše asynchronní balení).

Budete je tedy muset předat samostatně:

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

Samozřejmě to funguje pouze na serveru, takže se ujistěte, že je vaše metoda v kódu pouze pro server (nejlépe v server podadresář nebo uvnitř if (Meteor.isServer) ).




  1. Zvýšení výkonu díky použití hromadných vložek oproti běžným vložkám v MongoDB

  2. MongoDB - Výhoda použití 12bajtového řetězce jako jedinečného identifikátoru místo přírůstkové hodnoty

  3. Uživatelem definované funkce Mongo a zmenšení mapy

  4. Aktualizujte pole uvnitř seznamu pomocí ovladače MongoDB C#