تخطَّ إلى المحتوى

bulkWrite()

تنفيذ عدّة عمليات كتابة دفعة واحدة bulkWrite()

bulkWrite() تنفّذ مزيجًا من عمليات insertOne وupdateOne وdeleteOne (وغيرها) في طلب واحد، بدل طلب منفصل لكل عملية.

أكفأ بكثير من استدعاء كل عملية على حدة داخل حلقة، لأنها ترسل كل العمليات دفعة واحدة للخادم. افتراضيًّا تُنفَّذ العمليات بالترتيب (ordered) وتتوقّف عند أوّل خطأ؛ بتمرير ordered: false تُكمَل بقية العمليات حتى لو فشلت واحدة، وقد تُنفَّذ بالتوازي (أسرع خصوصًا مع sharding).

الصياغة

db.collection.bulkWrite([ { insertOne: {...} }, { updateOne: {...} }, { deleteOne: {...} } ], { ordered })

📄 مثال

db.products.bulkWrite([
  { insertOne: { document: { name: "منتج جديد", price: 50 } } },
  { updateOne: {
      filter: { sku: "A100" },
      update: { $set: { price: 45 } }
  } },
  { deleteOne: { filter: { sku: "discontinued-1" } } }
], { ordered: false })

أهم المعاملات

المعاملالوظيفة
orderedtrue (افتراضي) يوقف عند أوّل خطأ، false يكمل الباقي

💡 نصائح عملية

  • استخدمها بدل حلقة for تستدعي insertOne() مرارًا — فرق أداء كبير مع آلاف العمليات

⚠️ أخطاء شائعة

  • توقّع أن ordered: false يعني تجاهل الأخطاء كليًّا — العمليات الفاشلة لا تزال تُسجَّل في نتيجة الاستدعاء وتحتاج فحصًا

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار MONGODB الكامل بالعربي.

📚 للتعمق التقني الكامل بالإنجليزية: MDN Web Docs