MongoDB 使用 forEach 的批量更新效率

MongoDB bulk update efficiency using forEach

您如何处理批量/批量更新文档(最多 10k 个文档)以及 forEach? (没有特定的更新标准,用于随机选择文档)

我正在考虑两个选项:

  1. forEach 闭包中的所有文档 _id 收集到一个数组中,然后使用更新 collection.update({_id : {$in : idsArray}}, ...)
  2. forEach 闭包中的更新查询添加到批量操作并在完成后执行,在 bulk.find({_id: doc.id}).updateOne({...}); bulk.execute();
  3. 的某处

我很快就会对此进行基准测试,但我想知道什么 I/O 更高效,并且考虑 'smart' 与 Mongo。

好的,我已经对这两个选项进行了基准测试。

TL;DR 选项一的速度是原来的两倍,所以收集 ID 并更新一次。

为了将来参考,更多详细信息:

  • 数据库中的文档总数约为 500k。
  • 每个文档包含大约 20-25 个字段。
  • 更新了 10-30k 个文档。

结果(时间因机器而异,但重要的是相对差异):

  1. 使用 ids 数组更新一次:200-500 毫秒。
  2. 批量更新:600-1000 毫秒。

回过头来看,我认为 bulk 可能会更快,因为可能有一些隐藏的优化。但我知道这个问题缺少逻辑,操作越少可能意味着速度越快,因此批量速度越慢。