insertMany()(批量插入)
最后更新:2026-10-09
insertMany()(批量插入)
insertMany()用于一次向集合插入多条文档,例如`db.users.insertMany([{ name: 'A' }, { name: 'B' }])`。ordered为true(默认)时按顺序逐条插入,遇到错误立即停止;为false时继续尝试剩余文档。返回结果包含acknowledged和insertedIds,后者是文档索引到_id的映射。批量插入比循环调用insertOne()少很多网络往返,是数据初始化、数据迁移的首选。
| 分类 | 写入 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
db.<集合>.insertMany(<文档数组>, { ordered: <bool>, writeConcern: <选项> })
⚙️ 参数
| 文档数组 | 要插入的文档数组,元素为BSON文档。 |
|---|---|
| ordered | 可选。true时遇错即停并回滚已插入部分,false时跳过错误继续,默认true。 |
| writeConcern | 可选。写入关注级别。 |
返回值:包含acknowledged和insertedIds(索引到_id的映射)的结果对象。
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// insertMany:一次插入三条用户文档
db.users.insertMany([
{ name: 'Alice', age: 21 },
{ name: 'Bob', age: 25 },
{ name: 'Cara', age: 30 }
])
运行结果:
{
acknowledged: true,
insertedIds: {
'0': ObjectId('64c8a1b20000000000000001'),
'1': ObjectId('64c8a1b20000000000000002'),
'2': ObjectId('64c8a1b20000000000000003')
}
}
📌 注意事项
- ordered: true时批量中一条失败会导致前面已插入的文档也被回滚
- insertedIds的键是文档在数组中的索引('0'、'1'……)
- 单批总大小不能超过maxWriteBatchSize或16MB限制
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
QinsertMany和insertOne有什么区别?
AinsertMany()一次写入多条文档,仅一次网络往返;insertOne()一次只写一条。批量场景用insertMany()性能远好于循环insertOne()。
QinsertMany的ordered参数有什么用?
Aordered为true时按顺序插入,遇到错误立即停止并回滚本批;为false时跳过出错文档继续插入剩余文档。
QinsertMany部分失败时返回什么?
A返回acknowledged和insertedIds,其中只包含成功插入的文档索引映射;失败详情在捕获的BulkWriteError里。