On this page
Bulk()
在本页面
Tip
从 3.2 版开始,MongoDB 还提供了db.collection.bulkWrite()方法来执行批量写入操作。
Description
Bulk
( )- 2.6 版的新功能。
批量操作构建器,用于构造要对单个集合批量执行的写操作列表。要实例化构建器,请使用db.collection.initializeOrderedBulkOp()或db.collection.initializeUnorderedBulkOp()方法。
有序和无序批量操作
构建器可以将操作列表构造为* ordered 或 unordered *。
Ordered Operations
通过一个“有序的”操作列表,MongoDB 依次执行列表中的写操作。如果在写操作之一的处理过程中发生错误,MongoDB 将返回而不处理列表中任何剩余的写操作。
使用db.collection.initializeOrderedBulkOp()来为写命令的有序列表创建构建器。
在执行ordered操作列表时,MongoDB 按operation type和连续性对操作进行分组;即同一类型的连续操作被分组在一起。例如,如果一个有序列表具有两个插入操作,然后是一个更新操作,然后是另一个插入操作,则 MongoDB 会将操作分为三组:第一组包含两个插入操作,第二组包含更新操作,第三组包含最后的插入操作。此行为可能会在将来的版本中更改。
每组操作最多可以具有1000 operations
。如果一个组超过此limit
,则 MongoDB 将把该组分为 1000 个或更少的较小组。例如,如果批量操作列表包含 2000 个插入操作,则 MongoDB 将创建 2 个组,每个组包含 1000 个操作。
大小和分组机制是内部性能的详细信息,将来可能会更改。
要查看如何对批量操作执行的操作进行分组,请在执行之后*调用Bulk.getOperations()。
在分片集合上执行ordered操作列表通常比执行unordered列表要慢,因为使用有序列表,每个操作必须 await 上一个操作完成。
Unordered Operations
使用无序操作列表,MongoDB 可以并行执行,也可以不确定的 Sequences 执行列表中的写操作。如果在写操作之一的处理过程中发生错误,MongoDB 将 continue 处理列表中剩余的写操作。
使用db.collection.initializeUnorderedBulkOp()可以为写入命令的无序列表创建构建器。
在执行unordered操作列表时,MongoDB 将操作分组。对于无序的批量操作,可以对列表中的操作进行重新排序以提高性能。因此,执行unordered批量操作时,应用程序不应依赖于 Sequences。
每组操作最多可以具有1000 operations
。如果一个组超过此limit
,则 MongoDB 将把该组分为 1000 个或更少的较小组。例如,如果批量操作列表包含 2000 个插入操作,则 MongoDB 将创建 2 个组,每个组包含 1000 个操作。
大小和分组机制是内部性能的详细信息,将来可能会更改。
要查看如何对批量操作执行的操作进行分组,请在执行之后*调用Bulk.getOperations()。
Methods
Bulk()构建器具有以下方法:
Name | Description |
---|---|
Bulk.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()操作对象中执行的写入操作的数组。 |
Bulk.tojson() | 返回一个 JSON 文档,其中包含Bulk()操作对象中的操作和批处理数量。 |
Bulk.toString() | 以字符串形式返回Bulk.tojson()结果。 |