MongoDB:返回0表示某些值的$ count(聚合框架)

时间:2014-10-12 22:42:16

标签: mongodb aggregation-framework

我有以下MongoDB查询:

db.collection.aggregate([{ 
   $match : { platform_id : ... }
}, {
    $group: {
        _id: "$type",
        count: { $sum: 1 }
    }
}]);

$type的可能值为01

现在,如果有任何类型值(0或1)的记录,我会得到01的计数。

但是,如果所有记录都具有相同的类型(例如1),我如何将0的计数设为0?

this帖子看,它看起来可能无法实现。在这种情况下是真的吗?

1 个答案:

答案 0 :(得分:0)

只有汇总无法满足您的目标。之后需要一些JS代码。

var aggr = db.collection.aggregate([{ 
       $match : { platform_id : ... }
    }, {
        $group: {
            _id: {$ifNull : ["$type", 0]}, 
            count: { $sum: 1 }
        }
    }]);

var result = aggr.toArray(); // mongo shell V2.6+
// var result = aggr.result; // mongo shell before V2.6

[{_id : 0, count : 0}, {_id : 1, count : 0}].forEach(function(e) {
    var i = 0;
    var len = result.length;
    while (i < len && e._id != result[i]._id) ++i;
    if (i >= len) result.push(e);
});
// result is the final.