0

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

1 回答 1

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

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

于 2013-01-15T10:58:48.870 回答