参考 > 参考 > mongo Shell方法 > 批量操作方法 > Bulk.execute()
小费
从3.2版开始,MongoDB还提供了db.collection.bulkWrite()
执行批量写入操作的
方法。
Bulk.
execute
()¶执行Bulk()
操作构建器构建的操作列表。
Bulk.execute()
接受以下参数:
参数 | 类型 | 描述 |
---|---|---|
writeConcern |
文献 | 可选的。为整个批量操作编写关注文档。忽略使用默认值。对于独立
有关示例,请参见替代默认写问题。 如果在事务中运行,则不要为操作明确设置写关注点。要对事务使用写关注,请参见 事务和写关注。 |
返回值: | 一个BulkWriteResult 包含操作的状态对象。 |
---|
执行后,如果不重新Bulk()
初始化就无法重新执行对象。请参阅
db.collection.initializeUnorderedBulkOp()
和
db.collection.initializeOrderedBulkOp()
。
执行ordered
操作列表时,MongoDB按和连续性对操作进行分组;即,相同类型的连续操作被分组在一起。例如,如果一个有序列表具有两个插入操作,然后是一个更新操作,然后是另一个插入操作,则MongoDB会将这些操作分为三组:第一组包含两个插入操作,第二组包含更新操作,第三组包含最后的插入操作。此行为可能会在将来的版本中更改。operation type
每组操作最多可以有一个。如果一个组超过了该组,则MongoDB会将其分为1000个或更少的较小组。例如,如果批量操作列表包含2000个插入操作,则MongoDB将创建2个组,每个组包含1000个操作。1000 operations
limit
大小和分组机制是内部性能的详细信息,将来可能会更改。
若要查看如何将操作分组以执行批量操作,请在执行后调用。Bulk.getOperations()
ordered
在分片集合上执行操作列表通常比执行unordered
列表要慢,
因为对于有序列表,每个操作必须等待上一个操作完成。
执行unordered
操作列表时,MongoDB将操作分组。对于无序的批量操作,可以对列表中的操作进行重新排序以提高性能。因此,执行unordered
批量操作时,应用程序不应依赖于顺序
。
每组操作最多可以有一个。如果一个组超过了该组,则MongoDB会将其分为1000个或更少的较小组。例如,如果批量操作列表包含2000个插入操作,则MongoDB将创建2个组,每个组包含1000个操作。1000 operations
limit
大小和分组机制是内部性能的详细信息,将来可能会更改。
若要查看如何将操作分组以执行批量操作,请在执行后调用。Bulk.getOperations()
对于Bulk.find.insert()
操作,该集合必须已经存在。
对于Bulk.find.upsert()
,如果操作导致upsert,则该集合必须已经存在。
如果在事务中运行,则不要为操作明确设置写关注点。要对事务使用写关注,请参见 事务和写关注。
重要
在大多数情况下,与单文档写入相比,多文档事务产生的性能成本更高,并且多文档事务的可用性不应代替有效的架构设计。在许多情况下, 非规范化数据模型(嵌入式文档和数组)对于您的数据和用例将继续是最佳的。也就是说,在许多情况下,对数据进行适当的建模将最大程度地减少对多文档交易的需求。
有关其他事务使用方面的注意事项(例如运行时限制和oplog大小限制),另请参见 生产注意事项。
以下代码初始化集合Bulk()
上的操作构建器
items
,添加一系列插入操作,并执行这些操作:
该操作返回以下BulkWriteResult()
对象:
有关返回对象的详细信息,请参见BulkWriteResult()
。有关执行的批次的详细信息,请参见Bulk.getOperations()
。
对副本集的以下操作指定了5000毫秒的写关注时间,以
使该方法在写入传播到大多数有表决权的副本集成员之后或在5秒钟后超时后返回。"w: majority"
wtimeout
该操作返回以下BulkWriteResult()
对象:
看到
Bulk()
列出可用于批量操作的方法。