Bulk.insert()
提示
MongoDB 还提供了用于执行批量写入操作的 db.collection.bulkWrite()
方法。
说明
Bulk.insert(<document>)
将插入操作添加到批量操作列表中。
Bulk.insert()
接受以下参数:Parameter类型说明doc
文档要插入的文档。文档大小必须小于或等于最大 BSON 文档大小。
行为
插入不准确
即使在插入过程中遇到服务器错误,某些文档也可能已插入。
插入成功后,系统会返回 BulkWriteResult.insertedCount
,即已插入集合的文档数。 如果插入操作因副本集状态更改而中断,系统可能会继续插入文档。因此,BulkWriteResult.insertedCount
报告的文档数量可能少于实际插入的文档。
随机数据的性能考量
如果某操作在已索引字段上插入大量随机数据(例如,哈希索引),插入性能可能会降低。随机数据的批量插入会创建随机索引条目,从而增加索引的大小。如果索引达到需要每次随机插入都访问不同索引条目的大小,则插入操作会导致较高的 WiredTiger 缓存逐出和替换速度。发生这种情况时,索引不再完全位于缓存中,而是在磁盘上更新,这会降低性能。
要提高在已索引字段上批量插入随机数据的性能,可以采用以下两种方法之一:
删除索引,然后在插入随机数据后重新创建该索引。
将数据插入一个空的无索引集合。
批量插入后创建索引会对内存中的数据排序并对所有索引执行有序插入。
例子
以下示例为 items
集合初始化 Bulk()
操作构建器,并添加一系列插入操作以添加多个文档:
var bulk = db.items.initializeUnorderedBulkOp(); bulk.insert( { item: "abc123", defaultQty: 100, status: "A", points: 100 } ); bulk.insert( { item: "ijk123", defaultQty: 200, status: "A", points: 200 } ); bulk.insert( { item: "mop123", defaultQty: 0, status: "P", points: 0 } ); bulk.execute();