【问题标题】:Mongoose find and replace specific phrase the documentMongoose 查找并替换文档中的特定短语
【发布时间】:2019-09-26 15:40:25
【问题描述】:

我有这样的文件:

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

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

我想查找并替换所有文档的正文短语 some applelots 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

我该怎么做?

【问题讨论】:

标签: node.js mongodb mongoose text-search


【解决方案1】:

你应该考虑 mongoDB text index

您可以通过创建和索引来实现:

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

之后您可以运行此查询:

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

应该这样做

【讨论】:

  • 我使用 myDB.index({body: 'text'}) 创建了索引主体,但我如何使用 mongoose 查询?
  • 同样的查询应该适用于你的猫鼬模型@yong
【解决方案2】:

你可以循环更新

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 } });
});  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-18
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 2011-01-16
    • 1970-01-01
    相关资源
    最近更新 更多