bulkWrite() (混合バルク操作)
最終更新:2026-10-09
bulkWrite() (混合バルク操作)
bulkWrite() は1回の呼び出しで複数の書き込み操作を混在して実行します: insertOne、updateOne、updateMany、replaceOne、deleteOne、deleteMany。各操作は、操作タイプとそのペイロードを持つオブジェクトです。例: `db.users.bulkWrite([{ insertOne: { document: { name: 'A' } } }, { updateOne: { filter: { name: 'B' }, update: { $set: { age: 1 } } } }])`。結果は操作タイプごとにカウンタがまとめられます。
| カテゴリ | 書き込み |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
db.<collection>.bulkWrite(<operations>, { ordered: <bool> })
⚙️ パラメータ
| 操作の配列 | 書き込み操作オブジェクトの配列。各要素は {insertOne: {document: ...}} の形式です。 |
|---|---|
| ordered | 任意。true は最初のエラーで停止し、false は続行します。既定は true。 |
戻り値:BulkWriteResult。操作種別ごとに集計されたカウンターオブジェクト。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// bulkWrite: 挿入・更新・削除を1回の呼び出しで行う
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() はすべての操作を1つのリクエストで送るため、単一メソッドのループよりはるかに高速です。マイグレーションやインポートに最適です。
QbulkWrite はどの操作タイプをサポートしますか?
AinsertOne、updateOne、updateMany、replaceOne、deleteOne、deleteMany を1回の呼び出しで混在できます。
QbulkWrite の ordered オプションはどう働きますか?
Aordered: true(デフォルト)は最初のエラーで停止します。false は失敗した操作をスキップして続行します。部分的な成功が許容されるバッチジョブに適しています。