0

假设 Mongo 中有一个数据!有几个项目,还有经理,问题被分配给了谁。每个问题都分配给不同的人,因为项目有不同的部分。如何计算数字,每个受让人都已在项目中分配。例如:

{
    "Project A": {
            "Ted":10,
            "Matt":5
            },
    "Project B": {
            "Mary":3,
            "Hector":30
            }
}

以下写入总和但不分组:

db.test.issues.group({
    "key": {
        "project": true
        "assignee":true
    },
    "initial": {
        "countassignee": 0
    },
    "reduce": function(obj, prev) {
        prev.countassignee++;
    }
});

它将返回为:

{
{
"project": "Project A",
"countassignee":10,
"assignee":"Ted" 
}
....
}
4

2 回答 2

0

您提供的数据样本非常混乱。它的项目 A 和项目 B 应该是不同的文件。我相信组的最佳用途是在集合中进行聚合,如果您想在文档中计数,您可以使用 javascript。

于 2013-01-15T07:55:22.397 回答
0

好的!这似乎不是最好的答案,但它会做!首先定义一个按项目排序的游标

var cursor = db.test.find().sort({projects:1});

计数器列表:

var asgn_nums = {};

和一个保存项目名称的变量;:

var project = '0';

这里对每个项目都很重要:

while (cursor.hasNext()) {
    var issue = cursor.next();
    var p = issue.project;
    if(p != project)
    {
        if(project != '0'){
            print(project+":");
            printjson(asgn_nums);
        }
        project = p;
        asgn_nums = {};
    }
    if(issue.assignee != null)
    {
        if (asgn_nums[issue.assignee] == null)
            asgn_nums[issue.assignee] = 1;
        else
            asgn_nums[issue.assignee]+= 1;
    }
    if(!cursor.hasNext())
    {
        print(project+":");
        printjson(asgn_nums);
    }
}
于 2013-01-15T11:03:09.820 回答