findOneAndReplace() (استبدال مستند وإعادته)

آخر تحديث: 2026-10-09

findOneAndReplace() (استبدال مستند وإعادته)

تستبدل findOneAndReplace() أول مستند يطابق مرشحًا بمستند بديل وتُعيد المستند قبل أو بعد الاستبدال، مثل `db.users.findOneAndReplace({ name: 'Bob' }, { name: 'Bob', age: 26 }, { returnDocument: 'after' })`. على عكس replaceOne()، فإنها تقرأ المستند مرة أخرى، وهي مناسبة للتدفقات التي تحتاج نتيجة الاستبدال. يُستبدل كل حقل ما عدا _id.

الفئةالكتابة
إصدار MongoDB1.0+
لغة المثالmongosh (الطرفية)

📝 الصيغة

db.<collection>.findOneAndReplace(<filter>, <replacement>, { returnDocument: 'after', upsert: <bool> })

⚙️ المعلمات

شرط التصفيةشرط يطابق المستند المراد استبداله.
مستند جديدالاستبدال الكامل؛ يستبدل كل الحقول عدا _id.
returnDocumentاختياري. ‏'before' أو 'after'؛ الافتراضي 'before'.

القيمة المرجعة:المستند قبل (أو بعد) الاستبدال؛ null إذا لم يتطابق شيء وكان upsert معطَّلًا.

▶ مثال

نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):

// findOneAndReplace: استبدال مستند Bob وإعادة الجديد
const doc = db.users.findOneAndReplace(
  { name: 'Bob' }, { name: 'Bob', age: 26, vip: true },
  { returnDocument: 'after' }
)
doc

المخرجات:

{
  _id: ObjectId('64c8a1b20000000000000002'),
  name: 'Bob',
  age: 26,
  vip: true
}

📌 ملاحظات

مزيد من الحالات العملية قريبًا.

📚 دروس ذات صلة

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

Qما الفرق بين findOneAndReplace و replaceOne؟
Aتُعيد replaceOne() عدّادات؛ بينما تُعيد findOneAndReplace() المستند قبل أو بعد الاستبدال.
Qهل يمكن أن تغيّر findOneAndReplace حقل _id؟
Aلا — يجب أن يحتفظ المستند البديل بـ _id الأصلي وإلا تفشل العملية.
Qماذا تُعيد findOneAndReplace مع تفعيل upsert؟
Aعند عدم تطابق شيء، يُدرج مستند جديد ويُعاد، حاملًا _id المولَّد حديثًا.
Web-Tutorial.com

فريق Web-Tutorial التقني

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

100%