mongodb计数与总和不同

时间:2014-12-02 01:41:58

标签: mongodb aggregation-framework

我有一个查询,当我验证它时,我看到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

我不明白为什么我的计数不同。我唯一能想到的是它与数据存在于子文档数组中,而不是存在于数组中或仅存储在文档中。

1 个答案:

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