Пн go - заменить подстроку массива - PullRequest
1 голос
/ 03 апреля 2020

У меня проблемы с заменой подстроки в некоторых документах. Это будет пример одного из многих подобных документов:

{
"images" : [
    {
        "url" : "https://example/1234"
    },
    {
        "url" : "https://example/afaef"
    },
    {
        "url" : "https://example/abcdef"
    }
]}

Мне нужно заменить все подстроки ' example ', скажем, ' 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);});

Однако я получаю много ошибок, пытаясь использовать различные формы, такие как do c .images.url не определена. Также попробовал некоторые другие, но все еще неуспешные варианты этого.

Я был бы очень признателен за понимание того, что я делаю неправильно, или если есть лучший способ сделать это. Спасибо.

1 Ответ

1 голос
/ 03 апреля 2020

Вы можете попробовать какое-нибудь решение 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...