【问题标题】:Mongo Shell update nested array of documentsMongo Shell 更新嵌套的文档数组
【发布时间】:2021-07-20 17:05:00
【问题描述】:

我尝试将数组内的文档属性设置为大写。 这是mongodb游乐场的链接https://mongoplayground.net/p/BTP_h3kqK_S

这是一个文档示例

  {
    "_id": ObjectId("5e786a078bc3b3333627341e"),
    "value": {
      "items": [
        {
          "itemName": "alpha305102992",
          "itemNumber": ""
        },
        {
          "itemName": "beta305102630",
          "itemNumber": "P5000"
        },
        {
          "itemName": "gamma305102633 ",
          "itemNumber": ""
        }
      ]
    }
  }

我尝试将“itemName”设置为大写。

我想要的结果是:

  {
    "_id": ObjectId("5e786a078bc3b3333627341e"),
    "value": {
      "items": [
        {
          "itemName": "ALPHA305102992",
          "itemNumber": ""
        },
        {
          "itemName": "BETA305102630",
          "itemNumber": "P5000"
        },
        {
          "itemName": "GAMMA305102633 ",
          "itemNumber": ""
        }
      ]
    }
  }

【问题讨论】:

  • 它在操场上工作。但是我的 Robo 3T 说“请求格式不正确”。任何想法,我做错了什么?

标签: mongodb mongodb-query mongo-shell nested-documents


【解决方案1】:
  • $map 迭代 value.items 数组的循环
  • 使用$toUpperitemName 转换为大写
  • $mergeObjects 将当前对象与更新的 itemName 字段合并
db.collection.update({},
  [{
    $set: {
      "value.items": {
        $map: {
          input: "$value.items",
          in: {
            $mergeObjects: [
              "$$this",
              { itemName: { $toUpper: "$$this.itemName" } }
            ]
          }
        }
      }
    }
  }]
)

Playground

【讨论】:

    【解决方案2】:

    演示 - https://mongoplayground.net/p/geb1MRHXNyk

    使用update-documents-with-aggregation-pipeline

    db.collection.update({},
    [
      {
        $set: {
          value: {
            items: { // set item to loop only once
              $map: {
                input: "$value.items", // loop over items
                in: {
                  $mergeObjects: [ // merge document
                    "$$this",
                    { itemName: { $toUpper: "$$this.itemName" } } // change individual itemName to upper
                  ]
                }
              }
            }
          }
        }
      }
    ])
    

    聚合演示 - https://mongoplayground.net/p/9wtSkyjC88c

    带有您的游乐场链接的演示 - https://mongoplayground.net/p/5J7Qz97gZoJ

    使用 Playground 链接更新演示 - https://mongoplayground.net/p/8LHEuMakpFF

    【讨论】:

      猜你喜欢
      • 2015-07-13
      • 2015-09-01
      • 1970-01-01
      • 2013-09-05
      • 2022-01-17
      • 2016-10-06
      • 1970-01-01
      相关资源
      最近更新 更多