以下是我馆藏的一些文件:
{"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。
为什么我有这个区别?什么是计算它的正确方法?
答案 0 :(得分:1)
您可能在集合中有problems
数组中包含多个"Battery"
字符串的文档。
使用$unwind
时,这些会产生自己的文档,因此后续$group
操作会单独计算它们。