insertMany() (バルク挿入)
最終更新:2026-10-09
insertMany() (バルク挿入)
insertMany() は1回の呼び出しで複数のドキュメントを挿入します。例: `db.users.insertMany([{ name: 'A' }, { name: 'B' }])`。ordered: true(デフォルト)では順番に挿入され、最初のエラーで停止します。false の場合は残りのドキュメントも挿入を試みます。結果には acknowledged と insertedIds が含まれ、各ドキュメントのインデックスと _id が対応付けられています。insertOne() をループするよりもラウンドトリップを大幅に削減できるため、シード処理やマイグレーションの定番です。
| カテゴリ | 書き込み |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
db.<collection>.insertMany(<documents>, { ordered: <bool>, writeConcern: <options> })
⚙️ パラメータ
| ドキュメント配列 | 挿入する BSON ドキュメントの配列。 |
|---|---|
| ordered | 任意。true は最初のエラーで停止し、false はスキップして続行します。既定は true。 |
| writeConcern | 任意。書き込み保証(write concern)。 |
戻り値:acknowledged と insertedIds(インデックスから _id への対応)を持つ結果オブジェクト。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// insertMany: 3人のユーザーを一度に挿入する
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 では、1件の失敗でそのバッチで挿入済みのドキュメントがロールバックされる
- insertedIds のキーは配列内のドキュメントのインデックス('0'、'1'、...)
- 1つのバッチは maxWriteBatchSize と 16MB の上限内に収める必要がある
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
QinsertMany と insertOne の違いは何ですか?
AinsertMany() は1回のラウンドトリップで複数のドキュメントを書き込みます。insertOne() は1件のみです。バルクのワークロードでは insertMany() の方が insertOne() のループよりはるかに高速です。
QinsertMany の ordered オプションは何をしますか?
Aordered: true では最初のエラーで挿入が停止し、バッチはロールバックされます。false では失敗したドキュメントをスキップして残りを挿入し続けます。
Q一部のドキュメントだけ失敗した場合、insertMany は何を返しますか?
A成功したインデックスだけをカバーする acknowledged と insertedIds を返します。失敗の詳細はスローされる BulkWriteError に含まれます。