MongoDB は (/)、(演算子を使う /)、(/)のメソッドでデータを変更します。更新ではドキュメント全体を置き換えるのではなく を使う点が重要な違いです。
MongoDB は (/)、(演算子を使う /)、(/)のメソッドでデータを変更します。更新ではドキュメント全体を置き換えるのではなく を使う点が重要な違いです。
insertOneinsertManyupdateOneupdateManydeleteOnedeleteManydb.users.insertOne({ name: "Ann", age: 30 }); // → returns the inserted _id
db.users.insertMany([{ name: "Bob" }, { name: "Carol" }]); // bulk insert (efficient)
// updateOne — filter (which doc) + update (with OPERATORS)
db.users.updateOne(
{ name: "Ann" },
{ $set: { age: 31, status: "active" } } // $set: change specific fields
);
// common update operators
{ $set: { field: value } } // set/change a field
{ $unset: { field: "" } } // remove a field
{ $inc: { count: 1 } } // increment a number
{ $push: { tags: "new" } } // add to an array
{ $pull: { tags: "old" } } // remove from an array
{ $addToSet: { tags: "x" } } // add to array only if not present
db.users.updateMany({ active: false }, { $set: { archived: true } }); // update all matching
重要: 更新では 演算子($set、$inc、$push など)を使って 特定の フィールドを変更します。演算子を付けないと ドキュメント全体が置き換えられて しまい、よくある落とし穴になります。
// ❌ this REPLACES the whole document (loses other fields!)
db.users.updateOne({ name: "Ann" }, { age: 31 }); // Ann now has ONLY age!
// ✅ use $set to change just the field
db.users.updateOne({ name: "Ann" }, { $set: { age: 31 } });
db.users.deleteOne({ name: "Ann" }); // delete the first match
db.users.deleteMany({ active: false }); // delete all matching
db.users.deleteMany({}); // ⚠️ deletes ALL documents!
db.users.updateOne(
{ email: "[email protected]" },
{ $set: { name: "Ann" } },
{ upsert: true } // if no match, INSERT a new document
);
挿入・更新・削除の操作は、アプリケーションが MongoDB で データを変更する 手段であり、あらゆるデータ駆動アプリケーションの基本です。したがってこれらを理解することは必須の日常的な知識です。
メソッド(作成用の insertOne/insertMany、変更用の updateOne/updateMany、削除用の deleteOne/deleteMany)を知っていれば基本はカバーできます。
最も重要で間違えやすいポイント は、MongoDB の更新が update 演算子($set、$inc、$push、$pull など)を使って 特定の フィールドを変更するという点です。そして決定的に重要なのは、演算子を忘れるとドキュメント全体が置き換えられる(updateOne({...}, {age: 31}) が他のすべてのフィールドを消し去り age だけが残るという悪名高い落とし穴)ことです。そのため、フィールド単位の更新には常に $set(およびその他の演算子)を使うと理解しておくことが正確性のために不可欠です。
よく使う演算子(カウンタ用の $set、$inc、配列用の $push/$pull/$addToSet ── 配列演算子は MongoDB の配列を多用するドキュメントにおいて特に関連性が高い)を知っておくことは重要な日常知識です。
upsert({ upsert: true } ── 一致がなければ挿入する、MongoDB の insert-or-update)を理解しておくことは、よくある「挿入または更新」のパターンに役立ちます。
また、deleteMany({}) の危険性(SQL の WHERE 抜けに似た、すべてを削除してしまう危険)にも注目しておく価値があります。
データの変更は基本であり、MongoDB の演算子ベースの更新(ドキュメント置き換えの落とし穴を含む)、配列演算子、upsert こそがデータを正しく変更する方法であるため、挿入・更新・削除 ── 特に重要な update 演算子の区別(意図しないドキュメント置き換えの回避)── を理解することは、あらゆる MongoDB 開発において必須の知識です。中でも演算子の落とし穴は、実際のバグの頻出原因となっています。