【问题标题】:Find and replace in array of strings in mongodb在mongodb的字符串数组中查找和替换
【发布时间】:2021-08-30 08:36:15
【问题描述】:

我正在使用 MongoDB v4.4。我的文档结构如下所示:

{
  _id: ObjectId("..."),
  photos: ["image1.png", "image2.png"]
},
{
  _id: ObjectId("..."),
  photos: ["image3.png", "another_image.png, image5.jpg"]
},
{
  _id: ObjectId("..."),
  photos: ["image_name.jpg", "image2.jpg"]
},

我正在尝试将所有包含“.png”的字符串更改为“.jpg”。

我尝试了以下方法:

db.users.updateMany({
  photos: { $regex: /.png/ }
}, [{
  $set: {
    "photos.$[]": { 
      $replaceOne: { 
        input: "photos.$[]", find: ".png", replacement: ".jpg" 
      } 
    }
  }
}])

这会返回错误:

MongoServerError: Invalid $set :: caused by :: FieldPath field names may not start with '$'.

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework mongodb-update


    【解决方案1】:

    你需要迭代photos数组的循环并替换扩展,

    • $map 迭代 photos 数组的循环
    • $replaceOne 替换扩展名
    db.users.updateMany(
      { photos: { $regex: ".png" } },
      [{
        $set: {
          photos: {
            $map: {
              input: "$photos",
              in: {
                $replaceOne: {
                  input: "$$this",
                  find: ".png",
                  replacement: ".jpg"
                }
              }
            }
          }
        }
      }]
    )
    

    Playground

    【讨论】:

      猜你喜欢
      • 2022-11-15
      • 2021-12-11
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 2015-09-22
      • 2019-06-24
      • 2016-01-13
      相关资源
      最近更新 更多