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 تستخدم معاملات التحديث ($set, $inc, $push, $pull, إلخ) لتعديل الحقول المحددة — والأهم من ذلك، نسيان المعامل يستبدل المستند بأكمله (خطأ سيء السمعة حيث updateOne({...}, {age: 31}) يحذف جميع الحقول الأخرى، تاركاً فقط age)، لذا فهم استخدام $set دائماً (والمعاملات الأخرى) لتحديثات مستوى الحقول ضروري للصحة.
معرفة المعاملات الشائعة ($set, $inc للعدادات، $push/$pull/$addToSet للمصفوفات — معاملات المصفوفة كونها ذات صلة خاصة نظراً لأن مستندات MongoDB غنية بالمصفوفات) هي معرفة يومية مهمة.
فهم upsert ({ upsert: true } — إدراج إذا لم توجد مطابقة، نمط إدراج أو تحديث MongoDB) مفيد للنمط الشائع للإدراج أو التحديث.
من الجدير بالملاحظة أيضاً خطر deleteMany({}) (حذف كل شيء — مشابه لخطر WHERE الغير موجود في SQL).
بما أن تعديل البيانات أساسي، وبما أن تحديثات MongoDB القائمة على المعاملات (مع خطر استبدال المستند)، معاملات المصفوفة، و upsert هي كيفية تغيير البيانات بشكل صحيح، فهم الإدراج/التحديث/الحذف — خاصة التمييز الحاسم بين معاملات التحديث (تجنب استبدال المستند العرضي) — هو معرفة أساسية وضرورية لأي تطوير MongoDB، حيث يعتبر خطأ المعامل مصدراً متكرراً للأخطاء الفعلية.