WhiskeySchema.statics.count = function (data){
var distillerIds = data.map(function (a) {
return a.distiller._id;
});
return Whiskey
.aggregate([
{ $group: {
// Group by fields to match on distiller
_id: { distiller: '$distiller'},
// Count number of matching whiskeys for the group
count: { $sum: 1 }
}},
{
$match: {
distiller : {
$in: distillerIds
}
}
}
])
.execAsync()
.then(function(countedData){
console.log('counted data :', countedData)
return countedData;
})
.catch(function(err){
console.log('whiskey count err : ', err);
})
};
distiller / $ distiller是一个mongo ObjectID。一个参考。
我希望通过特定的ID找到,就像我在比赛中所做的那样。
然后,在那些匹配的结果中,我想在威士忌中的蒸馏器ID相同时对它们进行分组,并计算它们。 (试图计算每个蒸馏器的威士忌总数)。
匹配按预期工作,但是当我包含组和计数时 - 我继续为countData返回一个空数组。
counted data : []
答案 0 :(得分:0)
汇总的群组部分不正确,请将其更改为:
.aggregate([
{
$match: {
distiller : {
$in: distillerIds
}
}
}
{ $group: {
// Group by fields to match on distiller
_id: '$distiller',
// Count number of matching whiskeys for the group
count: { $sum: 1 }
}}
我也移动了匹配,最好在第一个管道阶段进行匹配,因此它使用集合中的索引。当进一步在管道中时,不能使用索引。