参考 > 参考 > mongo Shell方法 > 批量操作方法 > 块()
小费
从3.2版开始,MongoDB还提供了db.collection.bulkWrite()
执行批量写入操作的
方法。
Bulk
()¶批量操作构建器,用于构造要对单个集合批量执行的写操作列表。要实例化构建器,请使用
db.collection.initializeOrderedBulkOp()
或
db.collection.initializeUnorderedBulkOp()
方法。
构建器可以按有序或 无序构造操作列表。
使用有序操作列表,MongoDB会顺序执行列表中的写操作。如果在写操作之一的处理过程中发生错误,MongoDB将返回而不处理列表中任何剩余的写操作。
使用db.collection.initializeOrderedBulkOp()
创建建设者写命令的有序列表。
执行ordered
操作列表时,MongoDB按和连续性对操作进行分组;即,相同类型的连续操作被分组在一起。例如,如果一个有序列表具有两个插入操作,然后是一个更新操作,然后是另一个插入操作,则MongoDB会将这些操作分为三组:第一组包含两个插入操作,第二组包含更新操作,第三组包含最后的插入操作。此行为可能会在将来的版本中更改。operation type
每组操作最多可以有一个。如果一个组超过了该组,则MongoDB会将其分为1000个或更少的较小组。例如,如果批量操作列表包含2000个插入操作,则MongoDB将创建2个组,每个组包含1000个操作。1000 operations
limit
大小和分组机制是内部性能的详细信息,将来可能会更改。
若要查看如何将操作分组以执行批量操作,请在执行后调用。Bulk.getOperations()
ordered
在分片集合上执行操作列表通常比执行unordered
列表要慢,
因为对于有序列表,每个操作必须等待上一个操作完成。
使用无序操作列表,MongoDB可以并行执行,也可以不确定的顺序执行列表中的写操作。如果在写操作之一的处理过程中发生错误,MongoDB将继续处理列表中剩余的写操作。
使用db.collection.initializeUnorderedBulkOp()
创建建设者写命令的无序列表。
执行unordered
操作列表时,MongoDB将操作分组。对于无序的批量操作,可以对列表中的操作进行重新排序以提高性能。因此,执行unordered
批量操作时,应用程序不应依赖于顺序
。
每组操作最多可以有一个。如果一个组超过了该组,则MongoDB会将其分为1000个或更少的较小组。例如,如果批量操作列表包含2000个插入操作,则MongoDB将创建2个组,每个组包含1000个操作。1000 operations
limit
大小和分组机制是内部性能的详细信息,将来可能会更改。
若要查看如何将操作分组以执行批量操作,请在执行后调用。Bulk.getOperations()
对于Bulk.find.insert()
操作,该集合必须已经存在。
对于Bulk.find.upsert()
,如果操作导致upsert,则该集合必须已经存在。
如果在事务中运行,则不要为操作明确设置写关注点。要对事务使用写关注,请参见 事务和写关注。
重要
在大多数情况下,与单文档写入相比,多文档事务产生的性能成本更高,并且多文档事务的可用性不应代替有效的架构设计。在许多情况下, 非规范化数据模型(嵌入式文档和数组)对于您的数据和用例将继续是最佳的。也就是说,在许多情况下,对数据进行适当的建模将最大程度地减少对多文档交易的需求。
有关其他事务使用方面的注意事项(例如运行时限制和oplog大小限制),另请参见 生产注意事项。
该Bulk()
生成器有以下几种方法:
名称 | 描述 |
---|---|
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() 以字符串形式返回结果。 |