$addFields (إضافة حقول)
آخر تحديث: 2026-10-09
$addFields (إضافة حقول)
يضيف $addFields حقولًا جديدة إلى كل مستند أو يستبدل حقولًا موجودة فيه مع الإبقاء على كل الحقول الأخرى. وعلى خلاف $project — الذي يسقط الحقول غير المدرجة افتراضيًا — لا يزيد $addFields المستند إلا نموًّا. يمكن أن تكون القيم الجديدة أي تعبير تجميع، وغالبًا محسوبة من نتائج $lookup. منذ MongoDB 3.4 فهو مكافئ لـ $set.
| الفئة | المراحل الأساسية |
|---|---|
| إصدار MongoDB | 1.0+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
{ $addFields: { <newField>: <expression>, ... } }
⚙️ المعلمات
| حقل جديد | أسماء الحقول مربوطة بتعبيرات تشير إلى حقول المستند المُدخَل. |
|---|
القيمة المرجعة:تدفق مستندات مع حقول مضافة أو مستبدَلة
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// $addFields: إضافة حقل total
db.sales.aggregate([
{ $addFields: { total: { $multiply: ['$price', '$qty'] } } }
])
المخرجات:
// كل الحقول الأصلية محفوظة، بالإضافة إلى total
{ "item": "Pen", "price": 50, "qty": 3, "total": 150 }
📌 ملاحظات
- $addFields لا يزيل الحقول الموجودة أبدًا
- المسارات النقطية مثل 'order.amount' تخاطب الحقول المضمنة
- داخل مرحلة واحدة لا يمكنك الرجوع إلى الحقول المعرّفة في نفس المرحلة
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
مسارات التجميع المتقدمة: التعبيرات والتحويلات المعقدة
تدفقات التغييرات: مراقبة التغييرات في الوقت الفعلي
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qما الفرق بين $addFields و $set؟
Aمنذ MongoDB 3.4 هما مكافئان تمامًا؛ $addFields هو الاسم الأقدم.
Qهل يمكن لـ $addFields الرجوع إلى حقوله الجديدة؟
Aلا. تعبيرات المرحلة الواحدة ترى مستند الإدخال فقط؛ سلسل عدة مراحل $addFields بدلًا من ذلك.
Qهل يستبدل $addFields الحقول الموجودة؟
Aنعم. الحقل ذو الاسم الموجود يُستبدل.