$setField (تعيين حقل بالاسم)
آخر تحديث: 2026-10-09
$setField (تعيين حقل بالاسم)
يضيف $setField أو يحدّث حقلًا مسمى في مستند ويُرجع مستندًا جديدًا دون تعديل المدخل. الصياغة { $setField: { field: field-name, input: document, value: expression } }، ويقبل field تعبيرًا ديناميكيًا. القيمة null تحذف الحقل. يُستخدم عندما تحتوي أسماء الحقول أحرفًا خاصة أو يجب حسابها ديناميكيًا. المدخل الفارغ أو المفقود يُرجع null. على خلاف مرحلة $set، يعمل $setField داخل التعبيرات المتداخلة ويدعم أسماء الحقول الديناميكية.
| الفئة | الحرفي والمتغير والكائن |
|---|---|
| إصدار MongoDB | 5.0+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
{ $setField: { field: <field-name>, input: <document-expression>, value: <expression> } }
⚙️ المعلمات
| field | اسم الحقل كنص أو تعبير يُحلّ إلى نص. |
|---|---|
| input | مستند الهدف؛ الإدخال null أو المفقود يُنتج null. |
| value | القيمة المراد تعيينها؛ null يحذف الحقل. |
القيمة المرجعة:مستند جديد مع تعيين الحقل؛ null عندما يكون الإدخال null أو مفقودًا
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// $setField: إضافة حقل معدل الضريبة لكل طلب
db.orders.aggregate([
{ $project: {
doc: { $setField: { field: 'taxRate', input: '$$CURRENT', value: 0.08 } }
} }
])
المخرجات:
{ '_id': 1, 'doc': { '_id': 1, 'price': 100, 'taxRate': 0.08 } }
{ '_id': 2, 'doc': { '_id': 2, 'price': 50, 'taxRate': 0.08 } }
📌 ملاحظات
- يُرجع مستندًا جديدًا؛ والمدخل لا يُعدَّل
- القيمة null تحذف الحقل
- يُقرن مع $getField لأسماء الحقول الديناميكية
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
مزيد من الحالات العملية قريبًا.
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qهل يعدّل $setField المستند الأصلي؟
Aلا — المستندات غير قابلة للتعديل في خطوط الأنابيب؛ يُرجع $setField مستندًا جديدًا.
Qكيف أحذف حقلًا بـ $setField؟
Aاضبط value على null فيُحذف الحقل.
Qكيف يختلفان $setField ومرحلة $set؟
A$set يتعامل مع أسماء الحقول الثابتة فقط، بينما يدعم $setField الأسماء الديناميكية والتعبيرات المتداخلة.