Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

Bulk.execute()

在此页面上

  • 说明
  • 兼容性
  • 行为
  • 示例

提示

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

Bulk.execute()

执行由 Bulk() 操作构建器构建的操作列表。

Bulk.execute() 接受以下参数:

Parameter
类型
说明

writeConcern

文档

可选。为整个批量操作写关注文档。省略使用默认值。对于独立的 mongod 服务器,写关注默认为 { w: majority }。对于副本集,默认写关注为 { w: majority },除非作为副本集配置的一部分进行修改,或者副本集可能包含多个仲裁节点。

有关示例,请参阅覆盖默认写关注。

如果是在事务中运行,则请勿显式设置此操作的写关注。要将写关注与事务一起使用,请参阅事务和写关注。

返回:包含操作状态的 BulkWriteResult() 对象。

执行后,如果不重新初始化,就无法重新执行 Bulk() 对象。请参阅 db.collection.initializeUnorderedBulkOp()db.collection.initializeOrderedBulkOp()

此命令可用于以下环境中托管的部署:

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

注意

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

执行 ordered 操作列表时,MongoDB 会根据 operation type 和连续性对操作进行分组;也就是说,相同类型的连续 操作会被分在一组。例如,如果有序列表有两个插入操作,后跟一个更新操作,然后是另一个插入操作,则 MongoDB 将这些操作分为三个单独的组:第一组包含两个插入操作,第二组包含更新操作,第三组包含最后一次插入操作。这种行为在未来版本中可能会有所更改。

mongosh 中的 Bulk() 操作以及驱动程序中的类似方法对群组中的操作数量不设限制。要了解如何对这些操作进行分组以执行批量操作,请在执行调用 Bulk.getOperations()

提示

另请参阅:

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

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

mongosh 中的 Bulk() 操作以及驱动程序中的类似方法对群组中的操作数量不设限制。要了解如何对这些操作进行分组以执行批量操作,请在执行调用 Bulk.getOperations()

提示

另请参阅:

Bulk() 可用于分布式事务

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

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

如果是在事务中运行,则请勿显式设置此操作的写关注。要将写关注与事务一起使用,请参阅事务和写关注。

重要

在大多数情况下,与单文档写入操作相比,分布式事务会产生更高的性能成本,并且分布式事务的可用性不应取代有效的模式设计。在许多情况下,非规范化数据模型(嵌入式文档和数组)仍然是数据和使用案例的最佳选择。换言之,对于许多场景,适当的数据建模将最大限度地减少对分布式事务的需求。

有关其他事务使用注意事项(如运行时间限制和 oplog 大小限制),另请参阅生产注意事项

以下示例在 items 集合上初始化 Bulk() 操作构建器,添加一系列插入操作并执行操作:

var bulk = db.items.initializeUnorderedBulkOp();
bulk.insert( { item: "abc123", status: "A", defaultQty: 500, points: 5 } );
bulk.insert( { item: "ijk123", status: "A", defaultQty: 100, points: 10 } );
bulk.execute( );

操作会返回以下 BulkWriteResult() 对象:

BulkWriteResult({
acknowledged: true,
insertedCount: 2,
insertedIds: {
'0': ObjectId("64e61e3b84ff8808cd43a92c"),
'1': ObjectId("64e61e3b84ff8808cd43a92d")
},
matchedCount: 0,
modifiedCount: 0,
deletedCount: 0,
upsertedCount: 0,
upsertedIds: {}
})

有关返回对象的详细信息,请参见 BulkWriteResult()。有关执行批次的详细信息,请参见 Bulk.getOperations()

以下对副本集的操作指定了"w: 1"写关注,其中 wtimeout 为 5000 毫秒,以便该方法在写操作传播到大多数投票副本集节点后返回,或者该方法在 5 秒后超时。

var bulk = db.items.initializeUnorderedBulkOp();
bulk.insert( { item: "efg123", status: "A", defaultQty: 100, points: 0 } );
bulk.insert( { item: "xyz123", status: "A", defaultQty: 100, points: 0 } );
bulk.execute( { w: 1, wtimeout: 5000 } );

操作会返回以下 BulkWriteResult() 对象:

BulkWriteResult({
acknowledged: true,
insertedCount: 2,
insertedIds: {
'0': ObjectId("64e61e3b84ff8808cd43a92c"),
'1': ObjectId("64e61e3b84ff8808cd43a92d")
},
matchedCount: 0,
modifiedCount: 0,
deletedCount: 0,
upsertedCount: 0,
upsertedIds: {}
})

提示

请参阅:

Bulk() 了解可用于批量操作的方法列表。

后退

批量