Bulk()

在本页面

小费 从 version 3.2 开始,MongoDB 还提供db.collection.bulkWrite()方法来执行批量写入操作。

描述

  • Bulk ()

    • version 2.6 中的新内容。

批量操作构建器用于构造要对单个集合进行批量执行的写入操作列表。要实例化构建器,请使用db.collection.initializeOrderedBulkOp()db.collection.initializeUnorderedBulkOp()方法。

有序和无序批量操作

构建器可以按顺序或无序构造操作列表。

有序操作

使用有序操作列表,MongoDB 以串行方式执行列表中的写入操作。如果在处理其中一个写操作期间发生错误,MongoDB 将 return 而不处理列表中的任何剩余写操作。

使用db.collection.initializeOrderedBulkOp()为有序的写命令列表创建构建器。

执行有序操作列表时,MongoDB 按操作类型和 contiguity 对操作进行分组; i.e。相同类型的连续操作组合在一起。例如,如果有序列表有两个 insert 操作,后跟一个更新操作,后跟另一个 insert 操作,MongoDB 将操作分为三个独立的组:第一个 group 包含两个 insert 操作,第二个 group 包含更新操作,第三个 group 包含最后一个 insert 操作。此行为在将来的版本中可能会更改。

每个组操作最多可以有1000 operations。如果 group 超过limit, MongoDB 会将 group 分成 1000 或更小的较小组。例如,如果批量操作列表包含 2000 个插入操作,则 MongoDB 将创建 2 个组,每个组具有 1000 个操作。

尺寸和分组机械是内部性能细节,在将来的版本中可能会有所变化。

要查看如何为批量操作执行分组操作,请在执行后调用Bulk.getOperations()

在分片集合上执行有序操作列表通常比执行无序列表慢,因为对于有序列表,每个操作必须等待上一个操作完成。

无序操作

使用无序操作列表,MongoDB 可以在 parallel 中执行,也可以在非确定性 order 中执行列表中的写操作。如果在处理其中一个写操作期间发生错误,MongoDB 将继续处理列表中的剩余写操作。

使用db.collection.initializeUnorderedBulkOp()为无序的写命令列表创建构建器。

执行无序操作列表时,MongoDB 对操作进行分组。通过无序批量操作,可以重新排序列表中的操作以增加 performance。因此,applications 在执行无序批量操作时不应该依赖于 ordering。

每个组操作最多可以有1000 operations。如果 group 超过limit, MongoDB 会将 group 分成 1000 或更小的较小组。例如,如果批量操作列表包含 2000 个插入操作,则 MongoDB 将创建 2 个组,每个组具有 1000 个操作。

尺寸和分组机械是内部性能细节,在将来的版本中可能会有所变化。

要查看如何为批量操作执行分组操作,请在执行后调用Bulk.getOperations()

方法

Bulk()构建器具有以下方法:

名称描述
Bulk.insert()将 Insert 操作添加到操作列表中。
Bulk.find()指定更新或删除操作的查询条件。
Bulk.find.removeOne()将单个文档删除操作添加到操作列表。
Bulk.find.remove()将多个文档删除操作添加到操作列表中。
Bulk.find.replaceOne()将单个文档替换操作添加到操作列表中。
Bulk.find.updateOne()将单个文档更新操作添加到操作列表。
Bulk.find.update()multi更新操作添加到操作列表中。
Bulk.find.upsert()为更新操作指定upsert: true
Bulk.execute()批量执行操作列表。
Bulk.getOperations()返回Bulk() operations object 中执行的写操作的 array。
Bulk.tojson()返回一个 JSON 文档,其中包含Bulk() operations object 中的操作数和批处理数。
Bulk.toString()Bulk.tojson()结果作为 string 返回。