首页 > 解决方案 > 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)时遇到了很多错误,但未定义。还尝试了一些不同但仍然不成功的变体。

我真的很感激一些关于我做错了什么的见解,或者是否有更好的方法来做到这一点。谢谢。

标签: javascriptjquerymongodbmongoose

解决方案


您可以尝试一些 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);


推荐阅读