mongodb+;添加字段+;使用其他字段计算+;抓住马克斯
我在mongodb中有以下文档(2个节点NodeA和NodeB每小时1周的数据) 现在我要做的是创建一个新字段,如下所示: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
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]
}
});