db.collection.initializeOrderedBulkOp()

在本页面

Tip

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

Definition

Returns: 新的Bulk()操作构建器对象。

Behavior

操作 Sequences

通过一个“有序的”操作列表,MongoDB 依次执行列表中的写操作。

执行作业

在执行ordered操作列表时,MongoDB 按operation type和连续性对操作进行分组;即同一类型的连续操作被分组在一起。例如,如果一个有序列表具有两个插入操作,然后是一个更新操作,然后是另一个插入操作,则 MongoDB 会将操作分为三组:第一组包含两个插入操作,第二组包含更新操作,第三组包含最后的插入操作。此行为可能会在将来的版本中更改。

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

大小和分组机制是内部性能的详细信息,将来可能会更改。

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

在分片集合上执行ordered操作列表通常比执行unordered列表要慢,因为使用有序列表,每个操作必须 await 上一个操作完成。

Error Handling

如果在写操作之一的处理过程中发生错误,MongoDB 将返回而不处理列表中任何剩余的写操作。

Examples

以下代码在users集合上初始化Bulk()操作构建器,添加一系列写操作,并执行这些操作:

var bulk = db.users.initializeOrderedBulkOp();
bulk.insert( { user: "abc123", status: "A", points: 0 } );
bulk.insert( { user: "ijk123", status: "A", points: 0 } );
bulk.insert( { user: "mop123", status: "P", points: 0 } );
bulk.find( { status: "D" } ).remove();
bulk.find( { status: "P" } ).update( { $set: { comment: "Pending" } } );
bulk.execute();
首页