我创建了一个使用mongo的聚合,它将被安排每5分钟运行一次,并将结果添加到输出集合中。问题是,值正在被替换,我想要的是对它们求和。这是第一次运行它后我的集合中的结果文档:
{
"_id" : {
"ID" : "ID0001",
"NAME" : "NAME0001"
},
"total_a" : 8.0,
"total_b" : 2.0,
"total_c" : 5.0,
"total_d" : 5.0,
"TOTAL" : 35.0
}
当我在5分钟后再次运行时,我得到:
{
"_id" : {
"ID" : "ID0001",
"NAME" : "NAME0001"
},
"total_a" : 2.0,
"total_b" : 3.0,
"total_c" : 3.0,
"total_d" : 3.0,
"TOTAL" : 11.0
}
我想要的是在目标中添加值,而不是替换文档。所以,结果文件应该是:
{
"_id" : {
"ID" : "ID0001",
"NAME" : "NAME0001"
},
"total_a" : 10.0,
"total_b" : 5.0,
"total_c" : 8.0,
"total_d" : 8.0,
"TOTAL" : 46.0
}
解决方案可以是$ lookup阶段来加入然后添加值。但是,有没有其他方法可以告诉Mongo不要替换文件并将值加总?
感谢。
答案 0 :(得分:1)
您可以编写根据聚合结果和更新集合创建的更新查询。
以下代码查询_id
并根据聚合值递增值。
db.collection.aggregate([
aggregation code
]).forEach(function(doc){
var _id = doc._id;
var total_a = doc.total_a;
db.collection.update({ "_id" : _id },
{ $inc: {"total_a" : total_a } } )
};
如果要更新更多行,可以使用批量写入。