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()构建器具有以下方法:

NameDescription
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()结果。