使用forEach的MongoDB批量更新效率

使用forEach的MongoDB批量更新效率,mongodb,foreach,bulkupdate,Mongodb,Foreach,Bulkupdate,您将如何处理批量/批量更新文档(最多10000个文档)以及forEach? (无需更新特定标准,用于随机文档选择) 我考虑两种选择: 将forEach闭包中的所有文档\u id收集到一个数组中,然后使用 collection.update({{u id:{$in:idsArray}},…) 将forEach闭包中的更新查询添加到批量操作中,并在完成后执行 bulk.find({u id:doc.id}).updateOne({…}); bulk.execute() 我将很快对此进行基准测试,但我

您将如何处理批量/批量更新文档(最多10000个文档)以及
forEach
? (无需更新特定标准,用于随机文档选择)

我考虑两种选择:

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

  • 我将很快对此进行基准测试,但我想知道什么样的I/O效率更高,并且被认为是Mongo的“智能”。

    好的,因此我对这两个选项进行了基准测试

    TL;DR选项1的速度是前者的两倍,因此收集ID并更新一次

    有关以下内容的更多详细信息,以供将来参考:

    • 数据库中的文件总数约为500k
    • 文档每个包含大约20-25个字段
    • 对10-30k文档进行了更新
    结果(时间是特定于机器的,但相对差异才是关键):

  • 一次ids阵列更新:200-500毫秒
  • 批量更新:600-1000ms
  • 回想起来,我认为批量可能更快,因为可能有一些隐藏的优化。但我知道问题是缺少逻辑,操作越少可能意味着速度越快,因此批量越慢