updateOne() (単一ドキュメントの更新)
最終更新:2026-10-09
updateOne() (単一ドキュメントの更新)
updateOne() はフィルタに一致する最初のドキュメントを更新します。複数一致した場合も最初の1件(自然順序)だけが更新されます。変更は更新演算子($set/$inc/$push...)で表現します。結果には matchedCount、modifiedCount、upsertedId が含まれます。
| カテゴリ | 書き込み |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
db.<collection>.updateOne(<filter>, <update>, { upsert: <bool> })
⚙️ パラメータ
| フィルター条件 | ドキュメントに一致する述語オブジェクト。クエリ演算子をサポートします。 |
|---|---|
| 更新操作 | 更新演算子のオブジェクト(例: {$set: {age: 22}})。 |
| upsert | 任意。一致するものがない場合に新しいドキュメントを挿入します。既定は false。 |
戻り値:UpdateResult: { acknowledged, matchedCount, modifiedCount, upsertedId }。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// updateOne: Alice の年齢を 22 に設定する
db.users.updateOne(
{ name: "Alice" },
{ $set: { age: 22 } }
)
出力:
{ acknowledged: true, matchedCount: 1, modifiedCount: 1, upsertedId: null }
📌 注意事項
- 最初の一致のみを更新する。全件更新には updateMany() を使う
- 更新ドキュメントは更新演算子を使う必要がある。全置換には replaceOne() を使う
- upsert: true を指定すると、一致するものが無い場合に新しいドキュメントを挿入する
- 同一フィールドへの競合する演算子($set と $inc など)は許可されない
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
QupdateOne と findOneAndUpdate の違いは何ですか?
AupdateOne はカウンタ(matched/modifiedCount)のみを返します。findOneAndUpdate は更新前(または更新後)のドキュメントを返すため、旧値/新値が必要な場合に便利です。
QupdateOne が複数のドキュメントに一致した場合はどうなりますか?
A最初に一致したドキュメントのみ更新します。全一致を更新するには updateMany を使います。順序が重要な場合は sort オプションを渡して、どのドキュメントを最初とみなすかを制御できます。
QupdateOne で $set と $inc を組み合わせられますか?
Aできます。更新ドキュメントに複数の演算子を含められます。例: { $set: { status: 'active' }, $inc: { visits: 1 } }。順番に原子的に適用されます。