我有一个集合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
附近。
请提出一些方法,伪代码将非常有用
答案 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
- 如果没有文档与过滤器匹配,或者根据提供的过滤器和更新参数更新与过滤器匹配的文档,则创建新文档。