Nodejs-mongodb:更新集合中所有文档的文档结构

时间:2017-01-09 12:45:04

标签: node.js mongodb

我有一个集合data,它有大约300万个条目,其文档看起来像

{
    "_id" : ObjectId("5xxx85"),
    "user_id" : "1",
    "name" : "test",
    "user_private" : "0"
}

现在我想更新此集合中的所有文档,新文档将如下所示

{
    "_id" : ObjectId("5xxx85"),
    "rid" : "1",
    "user_name" : "test",
    "is_private" : "private",
    "is_moderator" : "true",
    "amount" : "11111"
}

,即我需要添加新字段,更新字段名称并检查是否user_private = 0然后放is_private as private或放is_private as not_private

我有点新,所以我无法得到如何有效地做到这一点,因为条目在300k附近。 请提出一些方法,伪代码将非常有用

1 个答案:

答案 0 :(得分:2)

更新文档的过滤条件。检查下面的伪代码,然后按link to read more

您需要拥有user_private

的现有值
db.messages.updateMany([
  { "user_private" : 0 }, // filter.
  { $set: { 
      "user_private" : "private",
      "is_moderator" : "true"
    } 
  }, // update.
  {
   upsert: true
  }
]);

upserts - 如果没有文档与过滤器匹配,或者根据提供的过滤器和更新参数更新与过滤器匹配的文档,则创建新文档。