MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да направите група mongo от страната на сървъра на Meteor

От Meteor v1.0.4:

Така че можете да извикате collection.rawCollection() за да получите основния обект на колекция:

var rawCollection = Orders.rawCollection();

Тази rawCollection има метод group което е еквивалентно на group метод в обвивката на MongoDB. API на основния възел обаче е асинхронен, така че ще искате да го преобразувате по някакъв начин в синхронна функция. Не можем да използваме Meteor.wrapAsync директно от group приема аргументи на функцията, които не са основното обратно извикване, така че ще заобиколим това с обвивка:

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

Във вашия метод можете да извикате ordersGroup както бихте направили db.orders.group в обвивката Mongo. Аргументите обаче се предават отделно, а не в обект:

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

За повече информация вижте тази документация (въпреки че имайте предвид, че callback параметърът трябва да бъде пропуснат, тъй като нашето асинхронно обвиване се грижи за това).

Така че ще трябва да ги подадете отделно:

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

Разбира се, това работи само на сървъра, така че се уверете, че вашият метод е в код само за сървър (за предпочитане в server поддиректория или вътре в if (Meteor.isServer) ).




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Производителност на заявка за актуализиране на Mongo DB

  2. MongoDB $degreesToRadians

  3. Express JS неограничена функция за параметър на заявка?

  4. Услугата „MongoDB сървър“ (MongoDB) не успя да стартира. Проверете дали имате достатъчно права за стартиране на системни услуги

  5. MongoDB отделна команда