$filter (تصفية المصفوفة)

آخر تحديث: 2026-10-09

$filter (تصفية المصفوفة)

يمشي $filter عبر مصفوفة، ويحتفظ بالعناصر التي تحقق شرطًا، ويُرجع مصفوفة جديدة. وهو العامل المفضّل لتصفية المصفوفات داخل تعبيرات التجميع. حالات الاستخدام النموذجية: اختيار العناصر المشحونة من طلب، إسقاط الوسوم غير الصالحة، أو اختيار المراجعات فوق عتبة معينة. تتطلب صياغته مصفوفة مدخل، واسم متغير as، وتعبير شرط cond يشير إلى العنصر الحالي عبر $$variable. يزيل العناصر فقط دون تحويلها؛ اقرنه بـ $map عندما يجب أن تتغير العناصر أيضًا. المدخل الفارغ يُرجع null.

الفئةالمصفوفة
إصدار MongoDB1.0+
لغة المثالmongosh (الطرفية)

📝 الصيغة

{ $filter: { input: <array>, as: <variable>, cond: <condition> } }

⚙️ المعلمات

inputتعبير المصفوفة المراد ترشيحه.
asاسم متغير العنصر الحالي، ويُشار إليه بـ $$variable في cond؛ اختياري، والافتراضي هو $$this.
condتعبير شرط يُحلّ إلى قيمة منطقية؛ يحدد العناصر التي تبقى.

القيمة المرجعة:مصفوفة جديدة من العناصر المطابقة للشرط؛ null إذا كان الإدخال null

▶ مثال

نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):

// $filter: الاحتفاظ بالعناصر ذات المخزون فوق الصفر
db.orders.aggregate([
  { $project: {
      inStock: { $filter: { input: '$items', as: 'it', cond: { $gt: ['$$it.qty', 0] } } }
  } }
])

المخرجات:

{ '_id': 1, 'inStock': [ { 'sku': 'A01', 'qty': 2 } ] }
{ '_id': 2, 'inStock': [] }

📌 ملاحظات

مزيد من الحالات العملية قريبًا.

📚 دروس ذات صلة

❓ الأسئلة الشائعة

Qما الفرق بين $filter و $map؟
A$filter يزيل عناصر بالشرط دون تغييرها؛ و $map يحوّل كل عنصر دون تغيير العدد. وغالبًا يُجمعان.
Qكيف أشير إلى المتغير في cond؟
Aبادئًا المتغير بعلامتي دولار، مثل { $gt: ['$$it.qty', 0] }؛ واستخدم $$this عند حذف as.
Qهل يمكن أن يعمل $filter على مصفوفة كائنات؟
Aنعم — صل إلى حقول الكائن بـ $$variable.field في cond، مثل '$$it.price'.
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%