mongodb - 使用 $regex 从 MongoDB 中的集合数组中删除所有 base64 匹配项
问题描述
我有一个包含 base64 图像数组和普通文件名的图像对象的集合。我需要删除所有 base64 元素并只保留文件名。
images: {
more:[
'data:image/jpeg;base64,/9j/4Q...',
'data:image/jpeg;base64,/9j/4Q...',
'data:image/jpeg;base64,/9j/4Q...',
'file1.png',
'file2.png'
]
}
我使用了这些查询,但我无法更新数组:
db.cars.updateMany({}, {$pull: {'images.more': {$regex: '/^data(.+)$/'}}})
db.cars.updateMany({}, {$pull: {'images.more': {$regex: '/^data:([A-Za-z-+\/]+);base64,(.+)$/'}}})
两个查询都返回:
{ "acknowledged" : true, "matchedCount" : 163, "modifiedCount" : 0 }
在示例对象中,我使用 image/jpeg,但它也可能包含 bmp 图像或 png,因此正则表达式必须匹配所有可能的图像类型。
解决方案
不要在字符串值中包含/
分隔符:$regex
db.cars.updateMany({}, {$pull: {'images.more': {$regex: '^data(.+)$'}}})
/
分隔符仅用于 JS 正则表达式语法(也适用):
db.cars.updateMany({}, {$pull: {'images.more': {$regex: /^data(.+)$/}}})
推荐阅读
- python - django值函数重命名dict的键
- python - Python根据列表中的值对列表进行排序(从右到左)
- python - 将python作为windows服务
- python - np.transpose(y) 和 np.transpose([y]) 之间的区别
- sql - 在 SQL 中选择连续的时间间隔
- angular - 从 *ngFor 中删除项目未反映在 ng-select 下拉列表中
- python - 如何基于yolo将特定格式的json标签文件转换为txt标签文件?
- latex - 如何在 laTex 中添加可点击的链接?(\documentclass[10pt,a4paper,ragged2e]{altacv})
- r - R传单:更改多个组的图标大小
- selenium - Selenium WebDriver 消耗 19,000 MB 内存。启动 Firefox 需要 10 分钟