اذهب إلى المحتوى

السؤال

نشر

باستخدام الأوامر على المجموعة كـ bulk في mongodb لاحظت وجود تابعين متشابهين هما: updateOne , replaceOne.

ولكن حسب التوثيق كل منهما يقوم بتعديل المستندات التي يتم الاستعلام عنها بنفس الطريقة. هل من الممكن أن يكون updateOne شاملاً أكثر بحيث يمكنني استخدامه دائماً بدلاً من replaceOne ؟ أو ما الفرق تحديداً بين كل منهما ومتى يجب استخدام كل واحدة؟

Recommended Posts

  • 1
نشر

باستخدام replaceOne يمكنك فقط استبدال المستند بأكمله, بينما updateOne  تقوم بتحديث الحقول في  المستند.

ايضا باستخدام replaceOne ستفقد الحقول الموجودة في المستند القديم غير الموجودة في المستند الجديد. 

باستخدام updateOne يمكن إضافة حقول جديدة دون فقدان الحقول الموجودة في المستند القديم .

هذه أمثلة توضح الفرق باستخدام replaceOne , updateOne . 

{
	"id": ObjectId("123"),
	"code": 123
}

باستخدام replaceOne بهذه الطريقة 

replaceOne({
	"id": ObjectId("123")},
	{"code2": 321});

تكون نتيجة الكود كالتالي 

{
	"id": ObjectId("123"),
	"code2": 321
}

بينما باستخدام updateOne 

updateOne({
	"id": ObjectId("123"),
}, {$set: {"code2": 321}})

تكون نتيجة الكود 

{
	"id": ObjectId("123"),
	"code": 123,
	"code2": 321
}

 

  • 0
نشر

بالإضافة أيضاً إلى إختلاف طريقة عملهما كما تم الشرح في التعليق السابق ولكن عند العمل ب updateOne يمكنك الوصول واستخدام ال update operators مما تجعلك قادر على تنفيذ العديد من التحديثات المتزامنة ويتم تسجيل جميع التحديثات معاً فمثلاً عند القيام بزيادة قيمة حقل في نفس المستند معاً يتم تسجيل الزيادتين بينما إذا استخدمنا ال replaceOne سيتم تسجيل زيادة واحدة  

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...