如何部分更新 MongoDB 中的字段,以便新字段将旧文本替换为现有记录

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

这就是田野 标识 “https://image.s3.ca-central-1.amazonaws.com/prod/game/163221197…”

“image.s3.ca-central-1.amazonaws.com”这部分我想更改为“cloudfront.net”,因为我需要将所有徽标从S3更新为cloudfont。

mongodb mongo-shell
1个回答
0
投票

假设您的输入文档如下所示:

{
  _id: 1,
  logo: "https://image.s3.ca-central-1.amazonaws.com/prod/game/163221197…",
  ...
}

并且您希望将文档更新为如下所示:

{
  _id: 1,
  logo: "https://cloudfront.net/prod/game/163221197…",
  ...
}

那么@rickhg12hs的建议绝对是正确的选择。

update
将使用聚合管道语法,看起来像这样:

db.collection.update({},
[
  {
    $addFields: {
      logo: {
        $replaceOne: {
          input: "$logo",
          find: "image.s3.ca-central-1.amazonaws.com",
          replacement: "cloudfront.net"
        }
      }
    }
  }
])

这里是工作游乐场示例

还值得一提的是,这个问题的措辞有点误导。您无法“部分更新”MongoDB 中的字段。虽然措辞背后的意图是表明我们在逻辑上尝试修改现有字符串,但当数据库发生更改时,这将被转换为为该字段设置新的字符串值。这不会改变这个答案,但在将来考虑 MongoDB 的行为时,记住它可能是有用的信息。

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