Docs 菜单
Docs 主页
/ / /
Node.js
/

执行批量操作

bulkWrite() 方法对单个集合执行批量写入操作。此方法减少了从应用程序到服务器的网络往返次数,从而提高了吞吐量和性能。仅当传递给方法的所有 操作都完成后,批量写入才会返回所有操作的结果集合。

您可以在 bulkWrite() 中指定以下一项或多项写入操作:

  • insertOne

  • updateOne

  • updateMany

  • deleteOne

  • deleteMany

  • replaceOne

bulkWrite() 方法接受以下参数:

  • operations:指定要执行的批量写入操作。 将每个操作作为数组中的对象传递给bulkWrite() 。 有关显示每个写入操作的语法的示例,请参阅 bulkWrite API 文档。

  • options:影响操作执行的可选设置,例如写入操作是否应按顺序执行以及写入问题。

    默认情况下,MongoDB 会按指定顺序逐个执行批量写入操作(即连续执行)。有序批量写入期间,如果在处理某一操作期间出现错误,MongoDB 则会返回而不处理列表中的其余操作。相反,当 orderedfalse 时,MongoDB 会继续处理列表中的其余写入操作。无序操作在理论上速度更快,因为 MongoDB 可并行执行此类操作,但它只应在写入操作不依赖顺序时使用。

如果创建带有唯一索引约束的索引,则在执行以下格式的操作时可能会遇到重复键写入错误:

Error during bulkWrite, BulkWriteError: E11000 duplicate key error collection: ...

同样,如果尝试对使用模式验证的集合执行批量写入,则可能会出现与已插入或已修改文档的格式设置相关的警告或错误。

以下代码示例将对 sample_mflix 数据库中的 theaters 集合执行批量写入操作。对 bulkWrite() 的示例调用包括 insertOneupdateManydeleteOne 写入操作的示例:

注意

可以使用此示例连接到 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
}
← 注意更改