MongoDB:从字符串字段中删除第一个字符并更新该字段

时间:2020-04-29 04:43:45

标签: mongodb mongodb-query

我的文档中有一个字符串类型为imageUrl: '/xyz/....'的字段,但是现在我需要从该字段中删除第一个字符,并为所有文档更新该字段,例如imageUrl: 'xyz/....'

2 个答案:

答案 0 :(得分:1)

类似

db.collection.update(
         {},
         [{$set:{
            imageUrl:{
                 $substrBytes:[
                               "$imageUrl",
                               1,
                               { $subtract: [ { $strLenBytes: "$imageUrl" }, 1 ] }
                 ]
            }
         }}],
         {multi:true}
)

答案 1 :(得分:1)

在MongoDB版本> 4.0上,您可以在aggregation-pipeline中执行.update()'s,尝试下面的查询-这将用新值覆盖imageUrl字段,其中$substr有助于修剪原始字符串中的第一个字母:

db.collection.updateMany({}, 
 [{
    $set: {
      imageUrl: {
        $substrBytes: ["$imageUrl", 1, -1]
      }
    }
  }]
 );

测试: mongoplayground

注意:通常,查询应该可以正常工作,但过去,我曾见过从.updateMany之类的客户端甚至使用较旧的mongo shell执行robo3T的问题那就是您所看到的,然后我建议将.update()与选项{multi : true}一起使用。

更新:在最新的MongoDB版本> = 3.4上,您需要使用$substrBytes,它是$substr的别名。另外,如果您想检查/是否作为字段imageUrl的第一个字符存在,则需要在{imageUrl: /^[/]/}的过滤器部分中添加.updateMany()