Мангуст найдет и заменит конкретную фразу в документе - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть такие документы:

    {
      _id: 'some id',
      body: 'i want some apple',
    },

    {
      _id: 'some id2',
      body: 'i want some apple and banana',
    }

И я хочу найти и заменить всю фразу тела документа some apple на lots of oranges.

Ожидаемые результаты:

    {
      _id: 'some id',
      body: 'i want lots of oranges',
    },

    {
      _id: 'some id2',
      body: 'i want lots of oranges and banana',
    }

Итак, я нахожу все документы с этим:

    myDB.find({
        "body": {
          "$regex": "some apple",
          "$options": "i"
        }
      },
      function(err, docs) {
        console.log(docs);
      }
    );
)

Но не знаю, как заменить и обновить только конкретную текстовую фразу документа some apple до lots of oranges.

Как мне это сделать?

Ответы [ 2 ]

4 голосов
/ 26 сентября 2019

Вы должны рассмотреть mongoDB текстовый индекс

. Вы можете реализовать, создав и индексировав, как это:

db.yourCollectionName.createIndex({ body: "text" });

После чего вы можете выполнить этот запрос:

db.yourCollectionName.updateMany(
      { $text: { $search: "\"some apple\"" }},
      { $set: { body: "i want lots of oranges" }},
      { new: true }
);

Это должно сделать

1 голос
/ 26 сентября 2019

вы можете просмотреть и обновить

db.people.find({
    body: {
        $regex: "some apple",
        $options: "i"
    }
}).forEach(doc => {
    doc.body = doc.body.replace(/some apple/ig, 'lots of oranges');
    db.people.update({ _id: doc._id }, { $set: { body: doc.body } });
});  
...