MongoDB使用相同对象数组的另一个字段的值更新数组对象

时间:2020-09-18 10:20:27

标签: mongodb mongoose mongodb-query aggregation-framework

我有一个类似以下的收藏集:

{
    _id: asilu92834,
    services: [
        {
            chargeAmount: 10,
            calculatedChargeAmount: 5,
        },
        {
            chargeAmount: 20,
            calculatedChargeAmount: 15,
        }
    ]
}

我想要做的是用它的对象的calculatedChargeAmount字段的值来更新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字段名称不能以“ $”开头。不可能做我想达到的目标吗?如果可以,怎么办?

1 个答案:

答案 0 :(得分:0)

尝试以下方法:

exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'

请记住,这里的id是mongoDB中阵列服务的_id。它必须具有一个自动创建的_id。