mongo 使用该文档中的另一个字段更新数组中文档中的字段

问题描述 投票:0回答:1

我有一个包含这样数据的集合:

{
    "items": [
      {
        "product": {
          "name": "prod1",
          "price": {
            "pledge": 1,
            "cost": 19
          }
        }
      },
      {
        "product": {
          "name": "prod2",
          "price": {
            "pledge": 2,
            "cost": 10
          }
        }
      }
    ]
  }

我想更新整个集合,让它们像这样:

{
    "items": [
      {
        "product": {
          "name": "prod1",
          "price": {
            "pledge": 1,
            "deposit": 1,
            "cost": 19
          }
        }
      },
      {
        "product": {
          "name": "prod2",
          "price": {
            "pledge": 2,
            "deposit": 2,
            "cost": 10
          }
        }
      }
    ]
  }

对于商品中的每个价格,我想在数组的该元素中添加一个名为

deposit
的新字段,其值为
pledge
。 我怎样才能以优化的方式做到这一点?

arrays mongodb query-optimization
1个回答
0
投票

您应该需要使用聚合管道更新查询来引用该字段。

  1. $map
    - 迭代
    items
    数组中的元素

1.1。

$mergeObjects
- 将当前迭代对象与具有
price
字段的文档合并。

1.1.1。

$mergeObjects
- 将
product.price
对象与引用
deposit
值的
product.price.pledge
字段的文档合并。

db.collection.update({},
[
  {
    $set: {
      items: {
        $map: {
          input: "$items",
          in: {
            product: {
              $mergeObjects: [
                "$$this.product",
                {
                  "price": {
                    $mergeObjects: [
                      "$$this.product.price",
                      {
                        deposit: "$$this.product.price.pledge"
                      }
                    ]
                  }
                }
              ]
            }
          }
        }
      }
    }
  }
])

演示@Mongo Playground

© www.soinside.com 2019 - 2024. All rights reserved.