无法让mongodb $ group使用objectID和$ match

时间:2016-09-08 21:04:32

标签: mongodb mongoose aggregation-framework

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 : []

1 个答案:

答案 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 }
}}

我也移动了匹配,最好在第一个管道阶段进行匹配,因此它使用集合中的索引。当进一步在管道中时,不能使用索引。