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

findOneAndUpdate()

تحديث وإرجاع المستند بعملية واحدة findOneAndUpdate()

findOneAndUpdate() تحدّث مستندًا وترجع نسخته (قبل أو بعد التعديل) بعملية ذرّية واحدة.

الفرق عن updateOne() أنها ترجع المستند نفسه بدل تقرير عن عدد المستندات المعدَّلة — مفيدة عندما تحتاج القيمة الجديدة فورًا (مثل عدّاد يزيد ويُستخدم مباشرة)، بلا استعلام findOne() إضافي بعد التحديث.

الصياغة

db.collection.findOneAndUpdate(<filter>, <update>, { returnDocument, upsert })

📄 مثال

// إرجاع النسخة بعد التحديث (وليس قبله)
const updated = db.counters.findOneAndUpdate(
  { _id: "orderNumber" },
  { $inc: { seq: 1 } },
  { returnDocument: "after" }
)

console.log(updated.seq)

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

المعاملالوظيفة
returnDocument"before" (افتراضي) أو "after" — أي نسخة تُرجَع
upsertإنشاء مستند جديد إن لم يوجد تطابق (اختياري)
sortترتيب لاختيار المستند إن تطابق أكثر من واحد (اختياري)

💡 نصائح عملية

  • مثالية لتنفيذ عدّادات ذرّية (atomic counters) مثل ترقيم الطلبات بلا تعارض بين طلبات متزامنة

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

  • توقّع أن القيمة الافتراضية لـ returnDocument هي "after" — الافتراضي فعليًّا "before" (النسخة قبل التعديل)

خصائص ذات صلة

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

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