对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

Bulk.execute()(mongosh方法)

提示

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 将这些操作分为三个单独的组:第一组包含两个插入操作,第二组包含更新操作,第三组包含最后一次插入操作。这种行为在未来版本中可能会有所更改。

Bulk() operations in mongosh and comparable methods in the drivers do not have a limit for the number of operations in a group. To see how the operations are grouped for bulk operation execution, call Bulk.getOperations() after the execution.

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

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

Bulk() operations in mongosh and comparable methods in the drivers do not have a limit for the number of operations in a group. To see how the operations are grouped for bulk operation execution, call Bulk.getOperations() after the execution.

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() 了解可用于批量操作的方法列表。

给本页内容打分