首页 > 解决方案 > 使用另一个字段的值更新 MongoDB 数组字段值

问题描述

我知道可以更新特定的数组元素,如此处所述: https ://docs.mongodb.com/manual/reference/operator/update/positional-filtered/

另外,我知道可以使用字段值来更新另一个字段的值,如下所述:使用另一个字段的值更新 MongoDB 字段

我需要的是两者的结合。

假设我在数据库中有这个:

{
  a: [
     {
        aa: 10
     },
     {
        cc: 15
     }

  ]
}

现在,我想将一个字段添加bb到具有 ' 值的数组文档中aa,但前提是aa存在。所以输出是:

{
  a: [
     {
        aa: 10,
        bb: 10
     },
     {
        cc: 15
     }

  ]
}

我怎样才能做到这一点?

标签: mongodb

解决方案


尝试从 MongoDB 4.2 开始使用聚合管道进行更新,

  • 匹配字段存在条件
  • $mapa迭代数组的循环
  • $condaa如果字段不为空,则检查条件,然后添加bb值为 的新字段aa并使用 与当前对象合并$mergeObjects,否则返回当前对象
db.collection.update(
  { "a.aa": { $exists: true } },
  [{
    $set: {
      a: {
        $map: {
          input: "$a",
          in: {
            $cond: [
              { $ne: ["$$this.aa", null] },
              { $mergeObjects: ["$$this", { bb: "$$this.aa" }] }
              "$$this",
            ]
          }
        }
      }
    }
  }],
  { multi: true }
)

操场


推荐阅读