mongodb - MongoDB shell:使用正则表达式更改现有属性来更新属性
问题描述
我需要改变这个:
userId: 'sdfsd'
pictures: ['https://stackoverflow.com/questions/ask.jpg', 'https://stackoverflow.com/questions/ask2.jpg']
对此:
userId: 'sdfsd'
pictures: ['ask.jpg', 'ask2.jpg']
有没有办法只用一个命令来做到这一点?
解决方案
无需为您的用例应用正则表达式。
MongoDb方式(v4.2)
我们按https://stackoverflow.com/questions/
or分割/
并取最后一项。
db.collection.update({},
[
{
$set: {
pictures: {
$map: {
input: "$pictures",
in: {
$arrayElemAt: [
{
$split: [
"$$this",
"https://stackoverflow.com/questions/" // or split by "/"
]
},
-1
]
}
}
}
}
}
],
{
multi: true
})
JS方式
我们可以应用正则表达式、拆分等...并单独保存。
db.collection.find({}).forEach(function(doc){
doc.pictures = doc.pictures.map(x => x.replace("https://stackoverflow.com/questions/", ""));
db.collection.save(doc);
})
推荐阅读
- php - 未捕获的错误:调用 /Volumes/Datas/Sites/dev/sicgaboma/includes/classes/Account.inc.php:25 中未定义的函数 insertUserDetails()
- c# - Entity Framework Core 2 Migration issue
- .net - Cake 构建单个项目
- ios - When you build an iOS app for testing, can you have it end up in a folder?
- android - Runtime Permission - Requesting permission for already granted permission
- swift - Swift: Alamofire Documentation
- scala - Multiple rest calls to a service
- reactjs - 通过移动热点安装 create-react-app
- android - FCM Invalid topic name on base64 topic
- curl - Why is curl trying to connect to localhost instead of going out to the internet?