使用forEach进行MongoDB批量更新效率

时间:2016-06-28 17:31:46

标签: mongodb foreach bulkupdate

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

我正在考虑两个选项:

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

    我很快就会对此进行基准测试,但我想知道I / O的效率是多少,并认为与Mongo一样“聪明”。

1 个答案:

答案 0 :(得分:2)

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

TL; DR选项一快两倍,所以收集ID并更新一次。

供将来参考,更多细节:

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

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

  1. 使用ids数组进行一次更新:200-500ms。
  2. 批量更新:600-1000毫秒。
  3. 回顾过去,我认为批量可能更快,因为可能有一些隐藏的优化。但我明白问题是缺少逻辑,较少的操作可能意味着更快,因此批量较慢。