javascript - Mongo - 替换数组的子字符串
问题描述
我无法替换某些文档中的子字符串。这将是许多类似文档之一的示例:
{
"images" : [
{
"url" : "https://example/1234"
},
{
"url" : "https://example/afaef"
},
{
"url" : "https://example/abcdef"
}
]}
我需要替换所有的“示例”子字符串,比如“ newresult ”
这是我的方法
db.collection.find({'images.url':/.*example*/} , {'images.url':true, _id:false}).forEach(function(doc) {
doc.images.url = doc.images.url.replace('example', 'newresult');
db.collection.save(doc);});
但是,我在尝试不同形式(如 doc.images.url)时遇到了很多错误,但未定义。还尝试了一些不同但仍然不成功的变体。
我真的很感激一些关于我做错了什么的见解,或者是否有更好的方法来做到这一点。谢谢。
解决方案
您可以尝试一些 MongoDB 解决方案,但如果它是一次性的 JS 脚本,那么您就很接近了,您唯一缺少的images
是一个数组,因此您需要.map()
像下面这样使用:
let doc = {
"images" : [
{
"url" : "https://example/1234"
},
{
"url" : "https://example/afaef"
},
{
"url" : "https://example/abcdef"
}
]};
doc.images= doc.images.map(({url, ...rest}) => ({url: url.replace('example', 'newresult'), ...rest}));
console.log(doc);
推荐阅读
- ios - UITapGestureRecognizer 不适用于 UIImageView
- json - 从 pyspark 脚本中删除 Hive 表的问题
- reactjs - 重新选择 createStructuredSelector 如何在 Typescript 中工作?
- c++ - C++ 中的 NULL 和 __null 有什么区别?
- api - 意外的标识符“axios”。导入调用只需要一个参数
- tensorflow - 使用自定义数据集运行 TensorFlow 对象检测时出错
- android - SharedPreferences 关闭应用程序后不存储值
- swift - 来自不同故事板的 Swift PushViewController
- .net - 如何在c#中使用OracleBulkCopy时插入序列值而不在oracle中触发之前
- database - 使用 Python 从 sqlite3 数据库中选择特定表