Mongodb 如何在流星中一次对多个场进行分组和计数

Mongodb 如何在流星中一次对多个场进行分组和计数,mongodb,meteor,Mongodb,Meteor,我有一个类似这样的收藏: db.GE_qstat_job_monitor.findOne() { "_id" : ObjectId("53fdf4bbe4b08d3f98fd6bcf"), "JB_job_number" : NumberLong(45759), "JB_script_file" : "/opt/UGE-8.1.7/examples/jobs/sleeper.sh", "JB_owner" : "root", "JB_job_name" :

我有一个类似这样的收藏:

db.GE_qstat_job_monitor.findOne()
{
    "_id" : ObjectId("53fdf4bbe4b08d3f98fd6bcf"),
    "JB_job_number" : NumberLong(45759),
    "JB_script_file" : "/opt/UGE-8.1.7/examples/jobs/sleeper.sh",
    "JB_owner" : "root",
    "JB_job_name" : "Sleeper",
    "job_state" : "Completed",
    "submission_time" : ISODate("2014-08-26T22:27:51Z"),
    "end_time" : ISODate("2014-08-27T15:17:49.564Z"),
    "wall_clock" : NumberLong(60598),
    "JB_pe" : "smp"
}
我需要按“JB_所有者”然后按“job_状态”对每个文档进行分组(因为每个所有者可能有多个具有不同状态的作业),然后计算每个所有者在每个状态下有多少个作业


我在中发现了另一个问题,但没有帮助。任何帮助或提示都将不胜感激:-)

假设您的收藏名为
Jobs
,这应该可以:

var默认值\u数据={
完成日期:0,
暂停:0,
正在运行:0,
队列:0,
cpu:0,
挂钟:0
};
var jobs=jobs.find().fetch();
var-dataByOwner={};
_.每个(作业、功能(作业){
if(dataByOwner[job.JB\u owner]==null)
dataByOwner[job.JB\u owner]=\uu.clone(默认\u数据);
dataByOwner[job.JB_owner][job.job_state]+=1;
dataByOwner[job.JB_owner].wall_clock+=job.wall_clock | 0;
dataByOwner[job.JB|u owner].cpu+=job.cpu | 0;
});
var result=\映射(dataByOwner,函数(data,owner){
var cpu=data.cpu;
var wall_clock=data.wall_clock;
删除data.cpu;
删除data.wall_时钟;
返回{
JB_所有者:所有者,
作业状态:数据,
cpu:cpu,
挂钟:挂钟
};
});
控制台日志(结果);

您希望输出是什么样子?这是在客户机上运行还是在服务器上运行?这将在服务器端运行,我希望它看起来像这样{JB_所有者:“Juan”,作业状态:{Completed:45,Suspended:2,running:1,Queue:0},wall_clock:2545972,cpu:0}我不清楚如何处理
wall\u clock
cpu
。每个作业都有一个cpu和wall\u clock整数值。我想把每个值加上一个显示,一个解决方案。正在运行代码。它工作得非常好!谢谢还有一件事。有没有办法在DB层实现这一点?自从我做
Jobs.find()。2) 您至少可以将
字段
说明符与
查找
一起使用,并尝试将作业限制为所有者的一个子集,或按日期等。3)您可以修改作业模式,以便以更聚合的方式存储作业,或者写入一个单独的集合,该集合存储类似于上述结果的内容,并在作业更改状态时进行修改。