bulkWrite()(批量混合写操作)
最后更新:2026-10-09
bulkWrite()(批量混合写操作)
bulkWrite()在一次调用中按顺序执行多条不同类型的写操作,支持insertOne、updateOne、updateMany、replaceOne、deleteOne、deleteMany六种操作。每条操作是包含操作类型和文档的独立对象,例如`db.users.bulkWrite([{ insertOne: { document: { name: 'A' } } }])`。返回结果按操作类型分组统计,适合数据迁移和批量导入场景。
| 分类 | 写入 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
db.<集合>.bulkWrite(<操作数组>, { ordered: <bool> })
⚙️ 参数
| 操作数组 | 写操作对象数组,每项形如{insertOne: {document: ...}}。 |
|---|---|
| ordered | 可选。true遇错即停,false跳过错误继续,默认true。 |
返回值:BulkWriteResult,按操作类型统计的计数器对象。
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// bulkWrite:一次完成插入、更新、删除三种操作
db.users.bulkWrite([
{ insertOne: { document: { name: 'Dana', age: 28 } } },
{ updateOne: { filter: { name: 'Alice' }, update: { $set: { age: 23 } } } },
{ deleteOne: { filter: { name: 'Bob' } } }
])
运行结果:
{
acknowledged: true,
insertedCount: 1,
matchedCount: 1,
modifiedCount: 1,
deletedCount: 1
}
📌 注意事项
- 操作类型名是insertOne/updateOne/updateMany/replaceOne/deleteOne/deleteMany
- ordered: false时跳过出错操作继续执行剩余操作
- updateOne等操作内部支持upsert选项
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
QbulkWrite比循环调用快多少?
AbulkWrite()只发一次网络请求执行全部操作,比循环调用单个方法快得多,尤其适合数据迁移和批量导入。
QbulkWrite支持哪些操作类型?
A支持insertOne、updateOne、updateMany、replaceOne、deleteOne、deleteMany六种,可在一次调用中混用。
QbulkWrite的ordered参数怎么用?
Aordered为true(默认)时按顺序执行遇错即停;为false时跳过失败操作继续执行后续操作,适合允许部分成功的批处理。