$replaceRoot (استبدال الجذر)
آخر تحديث: 2026-10-09
$replaceRoot (استبدال الجذر)
يستبدل $replaceRoot المستند بالكامل بمستند مضمّن محدد، ويُستخدم عادة لرفع كائن متداخل مثل detail إلى المستوى الأعلى. تُفقد كل الحقول الأصلية. يرمي خطأ عندما يكون الهدف مفقودًا أو ليس كائنًا؛ احمِ نفسك بـ $ifNull أو استخدم $replaceWith، الذي يُبقي المستند عندما تكون النتيجة null.
| الفئة | المراحل الأساسية |
|---|---|
| إصدار MongoDB | 1.0+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
{ $replaceRoot: { newRoot: <document expression> } }
⚙️ المعلمات
| newRoot | تعبير يُقيَّم ليصبح المستند الجديد؛ يجب أن يكون كائنًا. |
|---|
القيمة المرجعة:تدفق مستندات جذره newRoot
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// $replaceRoot: رفع detail إلى الجذر
db.orders.aggregate([
{ $replaceRoot: { newRoot: '$detail' } }
])
المخرجات:
// اختفت حقول الطلب الأصلية؛ يبقى detail فقط
{ "city": "SH", "zip": "200000" }
📌 ملاحظات
- يجب أن يُقيَّم newRoot إلى كائن وإلا ترمي المرحلة خطأ
- تُستبدل الحقول الأصلية بالكامل؛ ادمج ما تحتاجه بـ $set أولًا
- $replaceWith هو المتغير الذي يتحمل نتائج null
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qما الفرق بين $replaceRoot و $project؟
Aيختار $project أو يحسب حقولًا من الأصل؛ بينما يستبدل $replaceRoot مستندًا جديدًا كليًا.
Qماذا لو كان حقل newRoot غير موجود؟
Aيرمي خطأ. احمِ نفسك بـ $ifNull أو استخدم المتغير $replaceWith.
Qكيف أرفع مستوى تداخل واحدًا بدلًا من استبدال كل شيء؟
Aللرفع الجزئي استخدم تعبيرات المسارات النقطية في $project؛ أما $replaceRoot فيستبدل الجذر كله.