$match (تصفية المستندات)
آخر تحديث: 2026-10-09
$match (تصفية المستندات)
يصفّي $match المستندات بشرط استعلام، ممررًا المطابقة منها فقط إلى المراحل اللاحقة. وهو المكافئ التجميعي لمسند استعلام find(). ضع $match في أقرب موضع ممكن — يمكنه استخدام الفهارس ويقلل عدد المستندات الداخلة إلى المراحل اللاحقة، مما يجعله القاعدة رقم 1 لأداء التجميع.
| الفئة | المراحل الأساسية |
|---|---|
| إصدار MongoDB | 1.0+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
{ $match: { <query> } }
⚙️ المعلمات
| شرط الاستعلام | نفس تعبير الاستعلام الخاص بـ find()، ويدعم معاملات المقارنة/المنطقية/العناصر. |
|---|
القيمة المرجعة:تدفق مستندات مُرشَّح (للمرحلة التالية)
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// $match: الطلبات ذات الحالة A فقط
db.orders.aggregate([
{ $match: { status: "A" } },
{ $group: { _id: "$cust_id", total: { $sum: "$amount" } } }
])
المخرجات:
// يُرجع الإجمالي لكل عميل
{ "_id": "A123", "total": 250 }
{ "_id": "B456", "total": 130 }
📌 ملاحظات
- ضع $match أولًا للاستفادة من الفهارس
- لا يمكن استخدام $where أو $text داخل $match ($text يجب أن يكون المرحلة الأولى)
- تتوقف تحسينات الفهرس بعد مرحلة $match
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
مسارات التجميع المتقدمة: التعبيرات والتحويلات المعقدة
مقدمة إلى مسارات التجميع: طريقة `aggregate` والمرحلة الأساسية
تدفقات التغييرات: مراقبة التغييرات في الوقت الفعلي
$facet + $bucket + البحث النصي/الجغرافي المكاني
$lookup والارتباطات مع مجموعات متعددة
نماذج مونغوس وتصميم المخطط
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qما الفرق بين $match و find()؟
Aشروط الاستعلام متطابقة، لكن $match يُستخدم داخل خط أنابيب التجميع ويمرر النتائج إلى المرحلة التالية.
Qهل يمكن وضع $match في منتصف خط الأنابيب؟
Aنعم، لكنك تخسر تحسين الفهرس. قاعدة أساسية: ضعه أولًا كلما أمكن.
Qلماذا يوضع $match في بداية خط الأنابيب؟
Aالتصفية المبكرة تقلل حجم البيانات الممررة إلى المراحل اللاحقة وتتيح لـ $match استخدام فهرس، مما يعزز الأداء بشكل كبير. وضعه لاحقًا ما زال يعمل لكن دون استخدام الفهارس.