mongodb,mongoose,express,nodejs使用旧值更新多个文档中的字符串

时间:2019-12-23 19:04:58

标签: node.js mongodb express mongoose

我有一个名为“内容”的集合,其中包含大量这样的文档

{"_id":"5e01043e9fde7f33b8133b2d",
"name":"home",
"documentTypeId":"5df01430600e2258382ffb9c",
"parentContnetId":"",
"active":true,
"published":false,
"Url":"/home",
"dataTypes":[],
"__v":0},

{"_id":"5e01045e9fde7f33b8133b2e",
"name":"subhome",
"documentTypeId":"5df01430600e2258382ffb9c",
"parentContnetId":"",
"active":true,
"published":false,
"Url":"/home/subhome",
"dataTypes":[],
"__v":0},

{"_id":"5e01045e9fde7f33b8133b2d",
"name":"subsubhome",
"documentTypeId":"5df01430600e2258382ffb9c",
"parentContnetId":"",
"active":true,
"published":false,
"Url":"/home/subhome/subsubhome",
"dataTypes":[],
"__v":0},

{"_id":"5e01045e9fde7f33b8133b2a",
"name":"subhome2",
"documentTypeId":"5df01430600e2258382ffb9c",
"parentContnetId":"",
"active":true,
"published":false,
"Url":"/home/subhome2",
"dataTypes":[],
"__v":0},

{"_id":"5e01045e9fde7f33b8133b2b",
"name":"subsubhome",
"documentTypeId":"5df01430600e2258382ffb9c",
"parentContnetId":"",
"active":true,
"published":false,
"Url":"/home/subhome2/subsubhome",
"dataTypes":[],
"__v":0}

我想为其更新所有的“网址”字段,以便将每个“ / home”替换为“ / start” 。 我不想获取所有文档,然后在node js中更新它们,然后分别保存每个文档。 有没有什么办法可以更新它们而抛出MongoDB,或者不使用MongoDB shell,Mongoose会更好,我是说动态的?

1 个答案:

答案 0 :(得分:0)

  

我不想获取所有文档,然后在node js中更新它们,然后分别保存每个文档

为什么不呢?似乎是对我来说最快的方法。假设在每个文档上都需要进行URL替换,那么您执行的任何更新操作最终都会要求您保存修改后的每个文档。

db.content.find().forEach(function(e) {
    e.Url = e.Url.replace("/home","/start");
    db.content.save(e);
});

请小心替换-如果URL两次/home会发生什么情况?

如果您真的反对在整个集合中进行查找和更新,则this答案将字符串拆分成单独的字段,概述了如何使用聚合管道。您的里程可能会有所不同