假设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"
}
....
}
答案 0 :(得分:0)
您提供的数据样本非常令人困惑。它的项目A和项目B应该是不同的文件。 我相信群组的最佳用途是在群集中进行分类,如果你想在doucment中计算,你可以使用javascript。
答案 1 :(得分:0)
OK!它似乎不是最好的答案,但它会做到! 首先定义一个按项目排序的游标
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);
}
}