$filter (تصفية المصفوفة)
آخر تحديث: 2026-10-09
$filter (تصفية المصفوفة)
يمشي $filter عبر مصفوفة، ويحتفظ بالعناصر التي تحقق شرطًا، ويُرجع مصفوفة جديدة. وهو العامل المفضّل لتصفية المصفوفات داخل تعبيرات التجميع. حالات الاستخدام النموذجية: اختيار العناصر المشحونة من طلب، إسقاط الوسوم غير الصالحة، أو اختيار المراجعات فوق عتبة معينة. تتطلب صياغته مصفوفة مدخل، واسم متغير as، وتعبير شرط cond يشير إلى العنصر الحالي عبر $$variable. يزيل العناصر فقط دون تحويلها؛ اقرنه بـ $map عندما يجب أن تتغير العناصر أيضًا. المدخل الفارغ يُرجع null.
| الفئة | المصفوفة |
|---|---|
| إصدار MongoDB | 1.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': [] }
📌 ملاحظات
- أشر إلى العنصر الحالي في cond ببادئة $$، مثل $$it أو $$this
- يزيل $filter العناصر فقط؛ وندّد $map لتحويلها أيضًا
- تُسقط العناصر التي يكون شرطها null أو false؛ والمدخل الفارغ يُرجع null
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
مزيد من الحالات العملية قريبًا.
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qما الفرق بين $filter و $map؟
A$filter يزيل عناصر بالشرط دون تغييرها؛ و $map يحوّل كل عنصر دون تغيير العدد. وغالبًا يُجمعان.
Qكيف أشير إلى المتغير في cond؟
Aبادئًا المتغير بعلامتي دولار، مثل { $gt: ['$$it.qty', 0] }؛ واستخدم $$this عند حذف as.
Qهل يمكن أن يعمل $filter على مصفوفة كائنات؟
Aنعم — صل إلى حقول الكائن بـ $$variable.field في cond، مثل '$$it.price'.