2013-01-15 71 views
0

假設有一個項目數據庫;它由三個字段組成: 1.項目名稱 2.在該項目中工作的人員的姓名 3.該人的角色。如何查找MongoDB中另一個字段的一個字段分組數量?

我們想要在每個項目內計算每個人有多少角色!下面是一個例子:

{ 
    "Core" : { 
     "Ted": 3, 
     "Max":1 
    }, 
    "Web" : { 
     "Ted":1 
    } 
    } 

這是如下表

ProjectName  Person  Role 
--------------------------------------------------- 
Core   Ted   Developer 
Core   Ted   Designer 
Core   Ted   Manager 
Web    Ted   Developer 
Core   Max   PCM 
+0

你如何將你的桌子物品存儲在你的mongodb中?你可能需要使用聚合框架來獲得你的結果。 – Fivesheep

+0

是的,這就是問題所在!我沒有得到如何使用聚合...我真的很慢! – Ace

回答

0

使用聚合框架的結果

var res = db.test.aggregate([ 
    {$group:{_id:{project:"$ProjectName", name:"$Person"}, Role:{$sum:1}}}, 
    {$project:{_id:"$_id.project", names:"$_id.name", roles:"$Role"}}, 
    {$group:{_id:"$_id", record:{$addToSet:{name: "$names", role: "$roles"}}}} 
]) 

var finalResult = {'final':1}; 
for(var i in res.result){ 
    var project ={'seq':i}; 
    for(var j in res.result[i].record { 
     project[res.result[i].record[j].name]=res.result[i].record[j].role; 
    } 
    finalResult[res.result[i]._id]=project; 
} 
printjson(finalResult) 

將呈現類似的結果:

{ 
    "final" : "1", 
    "Web" : { 
     "seq" : "0", 
     "Ted" : 1 
    }, 
    "Core" : { 
     "seq" : "1", 
     "Ted" : 3, 
     "Max" : 1 
    } 
} 

但我相信還有更多的el egant的方式來做到這一點。這一個就好。

+0

如何過濾這些沒有名字的角色!它們顯示爲 '作用「:1 }' 我怎樣才能過濾掉它們,並且它們沒有出現。 – Ace

+0

@Ace我試圖提供一個解決方案。但實際上我對mongo shell並不熟悉,可能有更簡單和更好的方法來實現它。 – coderLMN

相關問題