0

プロジェクトのデータベースがあると仮定します。それは3つのフィールドで構成されています: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 に答える