执行批量操作
bulkWrite()
方法对单个集合执行批量写入操作。此方法减少了从应用程序到服务器的网络往返次数,从而提高了吞吐量和性能。仅当传递给方法的所有 操作都完成后,批量写入才会返回所有操作的结果集合。
您可以在 bulkWrite()
中指定以下一项或多项写入操作:
insertOne
updateOne
updateMany
deleteOne
deleteMany
replaceOne
bulkWrite()
方法接受以下参数:
operations
:指定要执行的批量写入操作。 将每个操作作为数组中的对象传递给bulkWrite()
。 有关显示每个写入操作的语法的示例,请参阅 bulkWrite API 文档。options
:影响操作执行的可选设置,例如写入操作是否应按顺序执行以及写入问题。默认情况下,MongoDB 会按指定顺序逐个执行批量写入操作(即连续执行)。有序批量写入期间,如果在处理某一操作期间出现错误,MongoDB 则会返回而不处理列表中的其余操作。相反,当
ordered
为false
时,MongoDB 会继续处理列表中的其余写入操作。无序操作在理论上速度更快,因为 MongoDB 可并行执行此类操作,但它只应在写入操作不依赖顺序时使用。
如果创建带有唯一索引约束的索引,则在执行以下格式的操作时可能会遇到重复键写入错误:
Error during bulkWrite, BulkWriteError: E11000 duplicate key error collection: ...
同样,如果尝试对使用模式验证的集合执行批量写入,则可能会出现与已插入或已修改文档的格式设置相关的警告或错误。
例子
以下代码示例将对 sample_mflix
数据库中的 theaters
集合执行批量写入操作。对 bulkWrite()
的示例调用包括 insertOne
、updateMany
和 deleteOne
写入操作的示例:
注意
可以使用此示例连接到 MongoDB 实例,并与包含样本数据的数据库进行交互。如需了解有关连接到 MongoDB 实例和加载样本数据集的更多信息,请参阅使用示例指南。
运行前一示例时,应能看到以下输出:
BulkWriteResult { result: { ok: 1, writeErrors: [], writeConcernErrors: [], insertedIds: [ [Object], [Object] ], nInserted: 2, nUpserted: 0, nMatched: 1, nModified: 1, nRemoved: 0, upserted: [], lastOp: { ts: [Timestamp], t: 17 } }, insertedCount: 2, matchedCount: 1, modifiedCount: 1, deletedCount: 0, upsertedCount: 0, upsertedIds: {}, insertedIds: { '0': 5ec4..., '1': 5ec4... }, n: 2 }