2014-12-02 191 views
-1

我有一个查询,当我验证它时,我看到count命令从汇总结果返回不同的结果。mongo db计数不同于汇总总计

我有子文档的数组,像这样:

{ 
    ... 
    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

用户可能希望两次玩同一游戏吗? – 2014-12-02 01:58:05

回答

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。