这就是我的文档的样子
"donator": [
{
"_id": "5edbd7d182af1f5aceab62bb",
"donatorName": "Niki",
"donationValue": 5000000
},
{
"_id": "5edbd7d182af1f5aceab62bc",
"donatorName": "Brian",
"donationValue": 5000000
}
],
"currentValue" : 1000000
我从捐赠者数组中的donationValue sum中获取了currentValue:
donator.reduce((a, { donationValue }) => a + donationValue,0);
我想通过在 donator 数组中添加新对象来更新文档,并在数据更新时自动更新 currentValue 字段。
我尝试使用聚合
MyCollection.findByIdAndUpdate(id, [
{
$set: req.body,
$set: { currentValue: { $sum: { $sum: donator.donationValue } } },
},
]);
答案 0 :(得分:0)
清理输入内容而不直接使用req.body
是个好习惯。
所以我们说
const donator = sanitizeDonator(req.body)
然后您可以添加donator
并更新currentValue
,如下所示。
请注意,更新查询不会自动生成捐赠者上的_id
,因此它必须存在于donator
对象中。
MyCollection.findByIdAndUpdate(id, [
{
$set: {
donator: {
$concatArrays: ["$donator", [donator]] // adding donator to the last element
}
}
}, {
$set: {
currentValue: {
$reduce: {
initialValue: 0,
input: "$donator",
in: {
$add: ["$$this.donationValue", "$$value"]
}
}
}
}
}
]);
相关API
$concatArrays
,
$reduce