在 MongoDB 中,如何使用对当前值进行操作的函数更新嵌套文档的值?

In MongoDB, how do I update the value of a nested document using a function that operates on the current value?

我正在尝试 $trim 嵌套文档中字段的值,但我一直无法弄清楚如何让它发挥作用。

我想 运行 $trim 在所有文档的 code 字段上,以便从 [=21= 中的静态文档中删除前导空格和尾随空格].

我正在使用 MongoDB 4.2.

我的文档结构如下:

{
   "_id": "root_id",
   "products": [
      {
         "id": "p1",
         "code": "TRAILING "
      },
      {
         "id": "p2",
         "code": " LEADING"
      }
      {
         "id": "p3",
         "code": "CLEAN"
      }
   ]
}

您可以为 MongoDB 版本 4.2 使用 Updates with Aggregation Pipeline

  1. $set - 设置 products 字段值。

    1.1。 $map - 迭代 products 数组和 return 一个新数组。

    1.1.1。 $mergeObjects - 合并当前对象 ($$this) 和具有来自 1.1.1.1.

    code 字段的对象

    1.1.1.1。 $trim - Trim code 值。

并使用 { multi: true } 更新多个文档。

db.collection.update({},
[
  {
    $set: {
      products: {
        $map: {
          input: "$products",
          in: {
            $mergeObjects: [
              "$$this",
              {
                code: {
                  $trim: {
                    input: "$$this.code"
                  }
                }
              }
            ]
          }
        }
      }
    }
  }
],
{
  multi: true
})

Sample Mongo Playground