如何在MongoDB中找到另一个字段的一个字段分组的数量?

时间:2013-01-15 08:46:54

标签: mongodb nested aggregation-framework

假设有一个项目数据库;它由三个领域组成: 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

1 个答案:

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

但我确信有更优雅的方法可以做到这一点。这个还可以。