我需要获取某个值在集合中出现的次数,如下所示:
[
{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});
});
}