【发布时间】:2020-09-18 22:05:48
【问题描述】:
我有一个类似如下的集合:
{
_id: asilu92834,
services: [
{
chargeAmount: 10,
calculatedChargeAmount: 5,
},
{
chargeAmount: 20,
calculatedChargeAmount: 15,
}
]
}
我想要做的是用它的对象的计算电荷量字段值更新chargeAmount 字段。更新后的文档应如下所示:
{
_id: asilu92834,
services: [
{
chargeAmount: 5,
calculatedChargeAmount: 5,
},
{
chargeAmount: 15,
calculatedChargeAmount: 15,
}
]
}
我知道如何在阅读每个文档后更新它,然后使用 forEach 一次更新一个。那不是我想要的。 我知道 updateMany() 函数接受聚合管道,在这些管道中你应该能够做类似的事情
[
{ $set: { "value1": "$value2"}}
]
但由于chargeAmount 和calculatedChargeAmount 嵌套在对象数组中,所以我尝试这样做
db.collection.updateMany(filter, [
{
$set: {
'services.$[].chargeAmount': '$services.$[].calculatedChargeAmount'
}
}
]);
我收到错误消息,提示 FieldPath 字段名称可能不以“$”开头。不可能做我想要达到的目标吗?如果有怎么办?
【问题讨论】:
标签: mongodb mongoose mongodb-query aggregation-framework