MongoDB تحديث () المستند مع المثال

\

⚡ ملخص ذكي

MongoDB تُعدّل عمليات التحديث (Update()) السجلات الموجودة في مجموعة. تأخذ هذه الطريقة شرطًا لاختيار المستندات ومُعدِّلًا مثل $set لتغيير قيم الحقول، ويُحدِّث الخيار multi عدة مستندات متطابقة في آنٍ واحد.

  • ✏️ دالة التحديث () يقوم الأمر update() بتغيير الحقول في المستندات التي تتطابق مع شرط معين.
  • 🎯 شروط المباراة: تحدد الوسيطة الأولى المستندات المراد تحديثها، مثل {Employeeid:1}.
  • 🔧 مجموعة $ Operaتور: يقوم عامل التشغيل $set بتعيين قيمة جديدة لحقل دون استبدال المستند بأكمله.
  • 📚 تحديثات عديدة: يقوم الخيار المتعدد، أو updateMany()، بتعديل كل مستند مطابق بدلاً من مستند واحد فقط.
  • ➕ تحديث/إضافة: يقوم خيار الإدراج/التحديث بإدراج مستند جديد عندما لا يتطابق أي مستند موجود مع الشرط.
  • 🔄 الأساليب الحديثة: تُعدّ الدوال updateOne() و updateMany() و replaceOne() البدائل الحالية للدالة update() المهملة.

MongoDB تحديث () الوثيقة

تحديثات المستندات الأساسية

MongoDB يوفر الأمر update() لتحديث مستندات المجموعة. لتحديث المستندات التي تريد تحديثها فقط، يمكنك إضافة معيار إلى بيان التحديث بحيث يتم تحديث المستندات المحددة فقط.

المعلمات الأساسية في الأمر هي الشرط الذي يجب تحديث المستند من أجله، والتالي هو التعديل الذي يجب تنفيذه.

يوضح المثال التالي كيفية القيام بذلك.

الخطوة 1) قم بإصدار أمر التحديث

الخطوة 2) اختر الشرط الذي تريد استخدامه لتحديد المستند الذي يحتاج إلى التحديث. في مثالنا، نريد تحديث المستند الذي يحتوي على معرف الموظف 22.

الخطوة 3) استخدم الأمر set لتعديل اسم الحقل

الخطوة 4) اختر اسم الحقل الذي تريد تعديله وأدخل القيمة الجديدة وفقًا لذلك.

db.Employee.update(
{"Employeeid" : 1},
{$set: { "EmployeeName" : "NewMartin"}});

إذا تم تنفيذ الأمر بنجاح، سيتم عرض الناتج التالي

الإخراج:

تحديثات المستندات الأساسية

يُظهر الإخراج بوضوح أن سجلًا واحدًا مطابقًا للشرط، وبالتالي تم تعديل قيمة الحقل ذي الصلة.

MongoDB تحديث Operaالاختصاصات

يُعدّ عامل $set الطريقة الأكثر شيوعًا لتغيير حقل، ولكن MongoDB توفر هذه الدالة عدة عوامل تحديث لتلبية احتياجات مختلفة. يمكنك وضعها في الوسيط الثاني للدالة update() بجانب أو بدلاً من $set:

  • مجموعة $: يقوم بتعيين قيمة حقل، وإنشاء الحقل إذا لم يكن موجودًا.
  • $ غير محدد: يزيل حقلاً من المستند بالكامل.
  • $inc: يزيد أو ينقص حقلًا رقميًا بمقدار معين.
  • $mul: يضرب قيمة حقل رقمي.
  • $rename: يُعيد تسمية حقل باسم جديد.
  • $دفع: يضيف قيمة إلى حقل مصفوفة.
  • سحب $: يزيل القيم المطابقة من حقل المصفوفة.

يستهدف كل عامل الحقول التي تحددها فقط، تاركًا باقي المستند دون تغيير. يمكنك دمج عدة عوامل في استدعاء واحد للدالة update() لتعديل حقول متعددة في آنٍ واحد، مما يحافظ على دقة التحديثات ويتجنب الكتابة فوق البيانات التي تريد الاحتفاظ بها.

تحديث قيم متعددة

للتأكد من تحديث المستندات المتعددة/المجمّعة في نفس الوقت MongoDB يجب عليك استخدام الخيار المتعدد لأنه بخلاف ذلك سيتم تعديل مستند واحد فقط في كل مرة بشكل افتراضي.

يوضح المثال التالي كيفية تحديث العديد من المستندات.

في هذا المثال، سنبحث أولاً عن المستند الذي يحتوي على معرف الموظف بالرقم "1" ونغير اسم الموظف من "Martin" إلى "NewMartin"

الخطوة 1) قم بإصدار أمر التحديث

الخطوة 2) اختر الشرط الذي تريد استخدامه لتحديد المستند الذي يحتاج إلى التحديث. في مثالنا، نريد تحديث المستند الذي يحتوي على معرف الموظف "1".

الخطوة 3) اختر اسم الحقل الذي تريد تعديله وأدخل قيمته الجديدة وفقًا لذلك.

db.Employee.update
(
	{
		Employeeid : 1
	},
	{
		$set :
		{
			"EmployeeName" : "NewMartin",
			"Employeeid" : 22
		}
	}
)

إذا تم تنفيذ الأمر بنجاح وإذا قمت بتشغيل "تجد" عند استخدام الأمر للبحث عن المستند الذي يحمل رقم الموظف 22، سترى الناتج التالي:

الإخراج:

تحديث قيم متعددة

يُظهر الإخراج بوضوح أن سجلًا واحدًا مطابقًا للشرط، وبالتالي تم تعديل قيمة الحقل ذي الصلة.

كيفية تحديث أو إدراج مستند في MongoDB

عملية التحديث والإدراج هي مزيج من التحديث والإدراج. عند تفعيلها، MongoDB يقوم بتحديث المستند الذي يطابق الشرط، أو يُدرج مستندًا جديدًا في حال عدم العثور على تطابق. يُعد هذا مفيدًا عندما لا تكون متأكدًا مما إذا كان السجل موجودًا بالفعل.

لإجراء عملية التحديث والإدراج، أضف خيار التحديث والإدراج مضبوطًا على القيمة "صحيح" كوسيط ثالث للدالة update():

db.Employee.update(
  {Employeeid: 5},
  {$set: {EmployeeName: "Sofia"}},
  {upsert: true}
)

هذا ما يحدث:

  • إذا كان هناك مستند يحمل رقم الموظف 5، MongoDB يقوم بتحديث حقل اسم الموظف.
  • إذا لم يكن هناك مثل هذا المستند، MongoDB يُدرج مستندًا جديدًا برقم الموظف 5 واسم الموظف "Sofiب ".

تُعد عمليات التحديث والإضافة مفيدة للعدادات والإعدادات وأي سير عمل ترغب فيه بإنشاء سجل عند الاستخدام الأول وتحديثه لاحقًا. في العصر الحديث MongoDBيمكن الحصول على نفس السلوك من خلال الدالتين updateOne() و updateMany() بتمرير {upsert: true} في الخيارات. يُرجى توخي الحذر عند استخدام الشرط، لأن استخدام عامل تصفية واسع النطاق مع دالة upsert قد يُنشئ مستندات غير متوقعة.

updateOne() مقابل updateMany() مقابل replaceOne()

أصبحت دالة update() الآن أمرًا قديمًا. MongoDB قسمت برامج التشغيل سلوكها إلى ثلاث طرق أكثر وضوحًا. يقارن الجدول أدناه بينها:

الأسلوب ماذا يفعل المستندات المتأثرة
تحديث واحد () يطبق عوامل التحديث على أول مستند مطابق واحد
تحديث كثير () يطبق عوامل التحديث على كل مستند مطابق كثير
استبدال واحد() يستبدل المستند الأول المطابق بالكامل بمستند جديد واحد

استخدم دالة updateOne() لإجراء تغيير واحد مُحدد، ودالة updateMany() بدلاً من خيار multi القديم، ودالة replaceOne() عندما تريد استبدال مستند كامل بدلاً من تعديل الحقول. تُعيد هذه الدوال نتيجة واضحة تُظهر عدد المستندات المُطابقة وعدد المستندات التي تم تعديلها، مما يجعلها أكثر أمانًا وأسهل في تصحيح الأخطاء من دالة update().

الأسئلة الشائعة

بدون عامل تحديث مثل $set، MongoDB يستبدل هذا الأمر المستند المطابق بالكامل بالكائن الذي تُقدمه، مع حذف أي حقول غير مُضمنة. استخدم دائمًا الأمر $set لتغيير حقول مُحددة مع الاحتفاظ بـping باقي الأجزاء سليمة.

نعم. إذا كان الحقل المسمى في $set مفقودًا من المستند المطابق، MongoDB يُضيفها بالقيمة المُعطاة. هذا يجعل $set مفيدًا لتحديث الحقول الموجودة وإضافة حقول جديدة.

استخدم الدالة findOneAndUpdate() مع ضبط خيار returnDocument على 'after'. فهي تُطبّق التغيير وتُعيد المستند المُعدّل في عملية واحدة، وهو أمر مفيد عندما تحتاج إلى القيم الجديدة فورًا.

يمكن للذكاء الاصطناعي تحويل طلب عادي إلى أمر تحديث أو تحديث متعدد مع الشرط والعامل المناسبين، مثل $set أو $inc، وشرح كل جزء حتى يتجنب المبتدئون الأخطاء.

نعم. يمكن للذكاء الاصطناعي أن يشير إلى تحديث يحذف $set ويستبدل المستندات بأكملها، وأن يحذر عندما يتطابق عامل التصفية مع كل شيء، وأن يقترح الاختبار على نسخة قبل تشغيله في بيئة الإنتاج.

تلخيص هذه التدوينة بـ: