您如何处理批量/批量更新文档(最多10k文档)以及forEach
?
(没有更新的具体标准,用于随机文档选择)
我正在考虑两个选项:
_id
闭包中的所有文档forEach
收集到一个数组中,然后使用更新
collection.update({_id : {$in : idsArray}}, ...)
forEach
闭包中的更新查询添加到批量操作,并在
bulk.find({_id: doc.id}).updateOne({...});
bulk.execute();
我很快就会对此进行基准测试,但我想知道I / O的效率是多少,并认为与Mongo一样“聪明”。
答案 0 :(得分:2)
好的,所以我对这两个选项进行了基准测试。
TL; DR选项一快两倍,所以收集ID并更新一次。
供将来参考,更多细节:
结果(时间是机器特定的,但相对差异是重要的):
回顾过去,我认为批量可能更快,因为可能有一些隐藏的优化。但我明白问题是缺少逻辑,较少的操作可能意味着更快,因此批量较慢。