我的文档中有一个字符串类型为imageUrl: '/xyz/....'
的字段,但是现在我需要从该字段中删除第一个字符,并为所有文档更新该字段,例如imageUrl: 'xyz/....'
。
答案 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()
。