【发布时间】:2019-09-19 20:17:38
【问题描述】:
我有一个名为 batch 的 id 列表,我想更新所有这些以将名为 fetched 的字段设置为 true。
原始测试集
[{
"user_id": 1,
},
{
"user_id": 2,
}
]
批量变量
[1, 2]
UpdateMany:
mongodb["test"].update_many({"user_id": {"$in": batch}}, {"$set": {"fetched": True}})
我可以使用上面的语句来做到这一点。
我还有另一个名为user_profiles 的变量,它是一个json 对象的列表/数组。我现在还想将字段 profile 设置为在列表(user_profiles)中找到的配置文件,其中 id 与我正在更新的 user_id/batch(id) 匹配。
user_profiles
[{
"id": 1,
"name": "john"
},
{
"id": 2,
"name": "jane"
}
]
预期的最终结果
[{
"user_id": 1,
"fetched": true,
"profile": {
"id": 1,
"name": "john"
}
},
{
"user_id": 2,
"fetched": true,
"profile": {
"id": 2,
"name": "jane"
}
}
]
我有数百万个这样的文档,所以我试图牢记性能。
【问题讨论】:
-
单个
$set是不可能的。由于您在不同的文档中设置不同的值,因此您将需要多个查询。 -
@rdas :( 你知道为性能优化的最佳方法吗?我正在处理数百万个文档。
-
按原样使用第一个查询。对于第二个配置文件部分,您可以尝试使用批量查询。