在水线上用帆计数群比



我需要获取某个值在集合中出现的次数,如下所示:

[
    {author: 'Diego', name: 'This is a great post', date:'03/13/78'},
    {author: 'Raul', name: 'Recipe for success', date:'02/03/99'},
    {author: 'Diego', name: 'Having too much fun', date:'01/01/77'},
    {author: 'Diego', name: 'Another post by me', date:'10/9/99'},
    {author: 'Diego', name: 'Mi first post', date:'01/01/73'},
    {author: 'Mariano', name: 'Mi best post', date:'01/01/95'},
]

我想要水线find()参数返回:

[
    {author: 'Diego', count: 4, date: '01/01/73'},
    {author: 'Raul', count: 1, date: '02/03/09'}
]
到目前为止,我能够得到所有,除了的计数,用这个:
Model.find({
    where: {author: {'!': 'Mariano'}},
    groupBy: ['author'],
    min: ['date']
// and count?!?!?!
}).exec(function(err, items) {
    //do something with items.
});

我已经尝试过"sum:['1']",但这只给了我一个名为"1"的属性,每个结果行中值为0。

使用node.js mongodb本地的聚合方法文档

的例子从我的代码:select count from order where restaurant ID =…ISO DATE BY前10个字符- days (2015-01-10)

if(restaurantsFound.length > 0) {
    var result = [],
        Q = require('q'),
        promises = [];
    for(var r in restaurantsFound) {
        promises[r] = (function () {
            var deferred = Q.defer();
            Order.native(function(err, collection) {
                if (err) {
                    console.error(err);
                    deferred.reject(err);
                }
                var ObjectID = require('mongodb').ObjectID;
                var restaurantId = new ObjectID(restaurantsFound[r]);
                collection.aggregate([
                    { $match : {
                        restaurant : restaurantId
                    }},
                    { $group : {
                        _id : {"_id":{"$substr":["$createdAt", 0, 10]}},
                        count : { $sum : 1 },
                        restaurant: {$addToSet: "$restaurant"}
                    }}
                ], function(err, result) {
                    deferred.resolve(result);
                });
            });
            return deferred.promise;
        })();
    }
    Q
        .allSettled(promises)
        .then(function(data) {
            var result = [];
            for(var k in data) {
                result[k] = [];
                for(var l in data[k].value) {
                    result[k].push({
                        restaurant: data[k].value[l].restaurant[0].toString(),
                        count: data[k].value[l].count,
                        date: data[k].value[l]._id._id
                    });
                }
            }
            return res.ok(result);
        }).catch(function(error) {
            console.error(error.message);
            return res.badRequest({message: error.message});
        });
}

相关内容

  • 没有找到相关文章

最新更新