$[identifier] (العامل الموضعي المفلتر)
آخر تحديث: 2026-10-09
$[identifier] (العامل الموضعي المفلتر)
$[identifier] هو العامل الموضعي الذي يحدّث، مع arrayFilters، عناصر المصفوفة المطابقة لشرط فقط. `{ $set: { 'grades.$[elem]': 90 } }, { arrayFilters: [{ 'elem.grade': { $gte: 85 } }] }`. عامل تحديث المصفوفات الأكثر مرونة، مقدَّم في MongoDB 3.6؛ تُعرَّف المعرفات في arrayFilters ويمكنها مطابقة حقول المستندات المتداخلة.
| الفئة | معدّل التحديث |
|---|---|
| إصدار MongoDB | 3.6+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
{ <update operator>: { '<array field>.$[<identifier>]': <value> } }, { arrayFilters: [ { '<identifier>.<field>': <condition> } ] }
⚙️ المعلمات
| حقل مصفوفة | حقل المصفوفة المراد تحديثه. |
|---|---|
| المعرّف | عنصر نائب مُعرَّف في arrayFilters، مثل elem. |
| arrayFilters | مصفوفة الشروط التي تحدّد قواعد مطابقة المعرّفات. |
القيمة المرجعة:نتيجة التحديث
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// $[elem]: تحديث الدرجات >= 85 فقط
// arrayFilters يحدد قاعدة elem
db.students.updateOne(
{ _id: 1 },
{ $set: { 'grades.$[elem]': 100 } },
{ arrayFilters: [{ 'elem': { $gte: 85 } }] }
)
المخرجات:
// فقط الدرجات 85 أو أعلى تصبح 100؛ والباقي يبقى دون تغيير
📌 ملاحظات
- المعرفات في arrayFilters لا تحمل بادئة $
- يدعم المستندات المتداخلة وشروط الحقول المتعددة
- لا يمكن خلطه مع $ أو $[] على نفس مسار التحديث
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
مزيد من الحالات العملية قريبًا.
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qما الفرق بين $[elem] و $[]؟
Aيحدّث $[] كل العناصر؛ بينما يحدّث $[elem] مع arrayFilters المطابقة فقط.
Qكيف أكتب arrayFilters؟
A{ arrayFilters: [{ 'elem': { $gte: 85 } }] }؛ المعرفات لا تحمل بادئة $.
Qهل يمكنني التصفية على حقول متداخلة؟
Aنعم، مثل { 'elem.type': 'exam' }.