文档菜单
文档首页
/
MongoDB 手册
/ / /

批量()

在本页

  • 描述
  • 兼容性
  • 有序和无序批量操作
  • 方法

提示

MongoDB 还提供了用于执行批量写操作的db.collection.bulkWrite() 方法。

Bulk()

Bulk 操作构建器用于构建单个集合中要批量执行的一系列写操作。要实例化构建器,请使用 db.collection.initializeOrderedBulkOp()db.collection.initializeUnorderedBulkOp() 方法。

此命令可在以下环境中部署的以下环境中使用

  • MongoDB Atlas:云中 MongoDB 部署的完全托管服务

注意

此命令在所有 MongoDB Atlas 集群中受支持。有关 Atlas 对所有命令的支持信息,请参阅 不受支持的命令。

构建器可以将操作列表构建为 有序无序

在有顺序的操作列表中,MongoDB会顺序执行列表中的写操作。如果在处理某个写操作期间发生错误,MongoDB将返回而不会处理列表中剩余的任何写操作。

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

当执行一个有序操作列表时,MongoDB将操作按操作类型和连续性分组;即同一类型的连续操作会被分组在一起。例如,如果一个有序列表包含两个插入操作,然后是一个更新操作,然后是另一个插入操作,MongoDB将操作分为三个不同的组:第一个组包含两个插入操作,第二个组包含更新操作,第三个组包含最后一个插入操作。这种行为可能在未来的版本中发生变化。

Bulk()操作在mongosh和驱动器中的类似方法没有组中操作数量的限制。要查看批量操作执行时操作的分组情况,请在执行后调用Bulk.getOperations()

提示

另请参阅

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

使用无序操作列表,MongoDB 可以并行执行列表中的写操作,并且顺序不可预测。如果在处理列表中的某个写操作时发生错误,MongoDB 将继续处理列表中剩余的写操作。

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

当执行无序操作列表时,MongoDB 会将操作分组。在无序批量操作中,列表中的操作可能会重新排序以提高性能。因此,在执行 unordered 批量操作时,应用程序不应依赖于顺序。

Bulk()操作在mongosh和驱动器中的类似方法没有组中操作数量的限制。要查看批量操作执行时操作的分组情况,请在执行后调用Bulk.getOperations()

提示

另请参阅

Bulk() 可以在 分布式事务 内部使用。

对于 Bulk.insert() 操作,集合必须已经存在。

对于 Bulk.find.upsert(),如果操作导致 upsert,集合必须已经存在。

如果在一个事务中运行,不要显式设置操作的写关注。要使用带有事务的写关注,请参阅 事务和写关注。

重要

在大多数情况下,分布式事务相比单个文档写入会带来更高的性能成本,分布式事务的可用性不应替代有效的架构设计。对于许多场景,去规范化数据模型(嵌入文档和数组)将继续是您数据和用例的最佳选择。也就是说,对于许多场景,适当地建模数据将最小化分布式事务的需求。

关于额外的事务使用考虑(例如运行时限制和oplog大小限制),请参阅生产注意事项。

Bulk() 构建器有以下方法

名称
描述
向操作列表中添加插入操作。
指定更新或删除操作的条件查询。
向操作列表中添加多个文档删除操作。
向操作列表中添加单个文档删除操作。
Bulk.find.delete() 的别名。
Bulk.find.deleteOne() 的别名。
向操作列表中添加单个文档替换操作。
向操作列表中添加单个文档更新操作。
向操作列表中添加 multi 更新操作。
为更新操作指定 upsert: true
批量执行一系列操作。
返回在 Bulk() 操作对象中执行的写入操作数组。
返回一个包含 Bulk() 操作对象中操作数和批次的 JSON 文档。
Bulk.toJSON() 结果作为字符串返回。

返回

db.collection.initializeUnorderedBulkOp