updateMany() (複数ドキュメントの更新)
最終更新:2026-10-09
updateMany() (複数ドキュメントの更新)
updateMany() はフィルタに一致するすべてのドキュメントを更新します。例: `db.users.updateMany({ age: { $lt: 18 } }, { $set: { isTeen: true } })`。最初の一致のみを更新する updateOne() とは異なり、一致する全ドキュメントに更新を適用します。バッチでの状態変更や全フィールド追加に便利です。結果は matchedCount(一致数)と modifiedCount(実際に変更された数)を報告します。
| カテゴリ | 書き込み |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
db.<collection>.updateMany(<filter>, <update>, { upsert: <bool> })
⚙️ パラメータ
| フィルター条件 | 述語オブジェクト。クエリ演算子をサポートします。 |
|---|---|
| 更新操作 | すべての一致に適用される更新演算子のオブジェクト。 |
| upsert | 任意。一致するものがない場合に1件のドキュメントを挿入します。既定は false。 |
戻り値:UpdateResult: { acknowledged, matchedCount, modifiedCount, upsertedId }。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// updateMany: 30歳より上の全員を senior としてマークする
db.users.updateMany(
{ age: { $gt: 30 } },
{ $set: { isSenior: true } }
)
出力:
{ acknowledged: true, matchedCount: 3, modifiedCount: 3, upsertedId: null }
📌 注意事項
- 一致するすべてを更新する。空フィルタ {} はコレクション全体を更新するため注意
- 値が変わらない場合、modifiedCount は matchedCount より小さくなることがある
- 大規模コレクションでは処理を分割し、パフォーマンスに注意する
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
QupdateMany は一致するすべてのドキュメントを更新しますか?
Aはい、一致するすべてのドキュメントを更新します。空フィルタ {} を渡すとコレクション全体を更新するので注意してください。
QupdateMany と updateOne の違いは何ですか?
AupdateOne() は最初の一致のみ、updateMany() は全一致を更新します。一括変更には updateMany() を選びます。
Qなぜ modifiedCount が matchedCount より小さくなるのですか?
A一致したドキュメントの中にすでに対象の値を持つものがあると、MongoDB はそれを変更なしと数えるため、modifiedCount から除外されます。