mongodb - 在 mongodb 中的字符串数组中查找并替换

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

我正在使用 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 '$'.

最佳答案

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

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

Playground

关于mongodb - 在 mongodb 中的字符串数组中查找并替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68981115/

相关文章:

python - 将 dict 字符串转换为字典列表以插入到 mongodb

java - 如何从 mongodb 或 java 查询 prolog 中的文件

MongoDB 在聚合期间替换值

mongodb - 在 MongoDB 中展平嵌套对象并重命名

javascript - 不使用 $project 将嵌套文档投影到根级别

mongodb - 聚合和运算符的区别

mongodb - 如何返回 mongodb 类别中的 bool 值

Python + MongoDB,如何动态选择DB Collection

使用点表示法的 Mongodb 查询速度慢

node.js - 基于第二个集合中的匹配进行聚合