假设有一个项目数据库;它由三个领域组成: 1.项目名称 2.在该项目中工作的人的姓名 3.人的角色。
我们想在每个项目中计算,每个人都有多少角色!以下是一个示例:
{
"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 :(得分: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
}
}
但我确信有更优雅的方法可以做到这一点。这个还可以。