结果来自"聚合与放松"与"找不到计数"?

时间:2015-02-17 12:53:41

标签: mongodb aggregation-framework

以下是我馆藏的一些文件:

{"make":"Lenovo", "model":"Thinkpad T430"},
{"make":"Lenovo", "model":"Thinkpad T430", "problems":["Battery"]},
{"make":"Lenovo", "model":"Thinkpad T430", "problems":["Battery","Brakes"]}

正如您可以看到某些文档没有问题,有些文档只有一个问题,而有些文档在列表中很少

我想计算有多少评论在问题列表中有特定的“问题”(如“电池”)。

我尝试使用以下聚合命令:

{ $match : { model : "Thinkpad T430"} },
{ $unwind : "$problems" },
{ $group: {
        _id: '$problems',
        count: { $sum: 1 }
}}

对于电池问题,计数为382.我还决定使用find()count()仔细检查此结果:

db.reviews.find({model:"Thinkpad T430",problems:"Battery"}).count()

结果是362。

为什么我有这个区别?什么是计算它的正确方法?

1 个答案:

答案 0 :(得分:1)

您可能在集合中有problems数组中包含多个"Battery"字符串的文档。

使用$unwind时,这些会产生自己的文档,因此后续$group操作会单独计算它们。