2014-07-22 36 views
0

我有一個蒙戈DB看起來像這樣的數組內的MongoDB聚集查詢 - >在多個條目

集合名稱:用戶

{ username:'something' 
    _id : ObjectId(someID1) 
    acl : { users : [ObjectId(someID1),ObjectId(someID2),ObjectId(someID3)] , group : [grpID4,grpID5,grpID6] } 
    . 
    . 
    . 
} 

我想有一個聚集查詢,看起來在所有用於db.users.acl.users的文檔並查找每個唯一對象ID的計數。

它像添加users.acl.users的所有數組,然後返回每個唯一ID的計數在一個python字典

{ 
"result" : [ 
     { 
       "_id" : ObjectId("someID1"), 
       "count" : 20     

     }, 
     { 
       "_id" : ObjectId("someID2"), 
       "count" : 2 
     }, 
     { 
       "_id" : ObjectID("someID3") 
       "count" : 1 
     }, 

], 
"ok" : 1 
} 

我曾嘗試Python的方式,即首先將所有陣列和然後找到計數,但我想通過查詢來做更多的事情,而與python相比更多。我很笨,如何在這樣的數組內查詢。

任何想法從哪裏開始?

回答

3

通常,當您在聚合框架中使用MongoDB中的數組時,您希望使用管道運算符$unwind將內容「解除規範化」爲單獨的文檔。將讓你與他們在其他流水線階段工作:

db.users.aggregate([ 
    { "$unwind": "$acl.users" }, 
    { "$group": { 
     "_id": "$acl.users", 
     "count": { "$sum": 1 } 
    }} 
]) 

Python語法通常是基本相同的JavaScript shell語法,所以直接的例子,如SQL to Aggregation mapping一般應適用。