mongodb+;添加字段+;使用其他字段计算+;抓住马克斯

mongodb+;添加字段+;使用其他字段计算+;抓住马克斯,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我在mongodb中有以下文档(2个节点NodeA和NodeB每小时1周的数据) 现在我要做的是创建一个新字段,如下所示: db.students.update({},{$set :{"new_field_name":<values_of_new_dieldname>}},{upsert:false,multi:true}) 然后我想结合“节点名称”得到“new_field_name”的和,它会给出如下结果: _id { "Time" : "24/11/2013

我在mongodb中有以下文档(2个节点NodeA和NodeB每小时1周的数据)

现在我要做的是创建一个新字段,如下所示:

db.students.update({},{$set :{"new_field_name":<values_of_new_dieldname>}},{upsert:false,multi:true})
然后我想结合“节点名称”得到“new_field_name”的和,它会给出如下结果:

_id {

        "Time" : "24/11/2013 23:00",
        "field_name": calcA + calcA  (from NodeA and NodeB)
}
因此,在本例中,从“18/11/2013 0:00”->“24/11/2013 23:00”开始,每小时我会有一个

然后我想得到“字段名”的最大值

这就是我想做的,我希望这是清楚的。我目前正在考虑使用聚合方法来尝试实现这一点。我这样做是否正确


谢谢你可以试试这样的东西

db.yourcollection.aggregate(
{ $group:
  {
    _id:"$Time",
        x1sum: {$sum:"$X_1"},
    X3sum: {$sum:"$X_3"}
  }
},

{ $project:
  {
    _id:1,
    calculation: {$divide:[[{$multiply:[{$add:["$x1sum","$x2sum"]},8}],3600]
  }  

});
请重新检查sintax,因为我现在无法正确测试它,它是用记事本写的,有很多花括号

如您所见,它首先按时间对数据进行分组,然后在投影中进行数学运算


如果需要,您可以使用新管道订购结果,或者在新的组管道中使用$max。

这个问题非常具体。一个更小的用例会更好。你真的不想把你的时间存储在我猜是MM/DD/YYYY的地方。使用ISODate()。
_id {

        "Time" : "24/11/2013 23:00",
        "field_name": calcA + calcA  (from NodeA and NodeB)
}
db.yourcollection.aggregate(
{ $group:
  {
    _id:"$Time",
        x1sum: {$sum:"$X_1"},
    X3sum: {$sum:"$X_3"}
  }
},

{ $project:
  {
    _id:1,
    calculation: {$divide:[[{$multiply:[{$add:["$x1sum","$x2sum"]},8}],3600]
  }  

});