Node.js 使用mongoDB推送值时更新平均值
我有一个文档结构如下的集合:Node.js 使用mongoDB推送值时更新平均值,node.js,mongodb,Node.js,Mongodb,我有一个文档结构如下的集合: { id : 1, datasets : [ { version : 1.1, data : [{x: 0, y: 1}, {x: 1, y: 2}], xAverage: 0.5, } ] } 我的目标是使xAverage在每次向数据数组添加新点时都进行更新 我使用updateOne添加新值,如下所示: collection.updat
{
id : 1,
datasets : [
{
version : 1.1,
data : [{x: 0, y: 1}, {x: 1, y: 2}],
xAverage: 0.5,
}
]
}
我的目标是使xAverage
在每次向数据
数组添加新点时都进行更新
我使用updateOne
添加新值,如下所示:
collection.updateOne({id: req.params.id},
{ $addToSet: { "datasets.$[t].data": req.body } },
{ arrayFilters: [ { "t.version": req.params.version } ], multi: true},
function(err, result) {
if (err) {
res.send(err);
} else {
res.send(result);
}
});
但未能理解如何相应地更新平均值。我尝试组合collection.aggregate()
更新此类对象的正确方法是什么
谢谢。使用
数据集
和数据
数组上的展开
,可以计算x值的平均值:
db.getCollection('<your-collection>').aggregate([{
"$unwind": {
path: "$datasets"
}
}, {
"$unwind": {
path: "$datasets.data"
}
}, {
"$group": {
"_id": "$id",
"xAverage": {
"$avg": "$datasets.data.x"
}
}
}
])
上面的聚合将返回
{
"_id" : 2,
"xAverage" : 13.3333333333333
},
{
"_id" : 1,
"xAverage" : 7.0
}
如果您确实需要沿插入的值存储平均值,您可以像以前那样插入/附加新数据点,然后使用上面的聚合查询计算并获得平均值,并将其结果设置为
xAverage
字段。您可以添加当前用于插入的nodejs代码吗?@eol node.js code added
{
"_id" : 2,
"xAverage" : 13.3333333333333
},
{
"_id" : 1,
"xAverage" : 7.0
}