我有一个查询,当我验证它时,我看到count命令从聚合结果中返回不同的结果。
我有一系列子文档,如下:
{
...
wished: [{'game':'dayz','appid':'1234'}, {'game':'half-life','appid':'1234'}]
...
}
我正在尝试查询集合中所有游戏的数量,并返回该名称以及我找到该游戏名称的次数。
如果我去
db.user_info.count({'wished.game':'dayz'})
它返回106作为值和
db.user_info.aggregate([{'$unwind':'$wished'},{'$group':{'_id':'$wished.game','total':{'$sum':1}}},{'$sort':{'total':-1}}])
返回110
我不明白为什么我的计数不同。我唯一能想到的是它与数据存在于子文档数组中,而不是存在于数组中或仅存储在文档中。
答案 0 :(得分:1)
$ unwind语句将使一个拥有多个希望游戏的用户显示为多个用户。想象一下这个数据:
{
_id: 1,
wished: [{game:'a'}, {game:'b'}]
}
{
_id: 2,
wished: [{game:'a'}, {game:'c'}, {game:'a'}]
}
count
永远不能超过2.
但是使用相同的数据,$unwind
将为您提供5种不同的文档。总结它们会给你一个:3,b:1,c:1。