$map (تحويل عناصر المصفوفة)
آخر تحديث: 2026-10-09
$map (تحويل عناصر المصفوفة)
يتكرر $map عبر مصفوفة، ويمرر كل عنصر عبر تعبير in، ويجمع النتائج في مصفوفة جديدة بنفس الطول. وهو العامل الوظيفي الأكثر استخدامًا في تعبيرات التجميع. الحالات النموذجية: تطبيق الضريبة على كل عنصر طلب، تحويل قائمة سلاسل إلى أحرف كبيرة، أو استخراج حقل من مصفوفة كائنات. يُشار إلى متغير as بـ $$variable داخل in، أو استخدم $$this عند حذف as. يحافظ $map على الطول ويغيّر قيم العناصر؛ ادمجه مع $filter (الإزالة) و $reduce (الطيّ) لخطوط أنابيب مصفوفات كاملة.
| الفئة | المصفوفة |
|---|---|
| إصدار MongoDB | 1.0+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
{ $map: { input: <array>, as: <variable>, in: <expression> } }
⚙️ المعلمات
| input | المصفوفة المراد التكرار عليها. |
|---|---|
| as | اسم متغير العنصر الحالي، ويُشار إليه بـ $$variable في in؛ اختياري، والافتراضي هو $$this. |
| in | التعبير المُقيَّم لكل عنصر؛ وتُشكّل نتائجه المصفوفة الجديدة. |
القيمة المرجعة:مصفوفة جديدة بنتائج in لكل عنصر؛ null إذا كان الإدخال null
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// $map: مضاعفة كمية كل عنصر
db.orders.aggregate([
{ $project: {
doubled: { $map: { input: '$items', as: 'it', in: { $multiply: ['$$it.qty', 2] } } }
} }
])
المخرجات:
{ '_id': 1, 'doubled': [ 4, 6 ] }
{ '_id': 2, 'doubled': [ 2 ] }
📌 ملاحظات
- in هو التعبير النهائي لكل عنصر؛ أشر إلى متغير as ببادئة $$
- يحافظ $map على الطول: يغيّر القيم لا العدد؛ وأزل العناصر بـ $filter
- ندّد $map/$filter/$reduce داخل in لبناء خطوط أنابيب وظيفية
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
مزيد من الحالات العملية قريبًا.
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qما الفرق بين $map و $filter؟
A$map يحوّل كل عنصر دون تغيير الطول؛ و $filter يزيل عناصر دون تغيير المحتوى. ويتداخلان جيدًا.
Qهل يمكن لـ $map تغيير طول المصفوفة؟
Aلا، النتيجة تطابق طول المدخل. استخدم $filter أو $reduce لتغييره.
Qهل يمكنني حذف متغير as؟
Aنعم — أشر إلى العنصر الحالي بـ $$this في in عند الحذف.