$elemMatch (مطابقة عنصر المصفوفة)
آخر تحديث: 2026-10-09
$elemMatch (مطابقة عنصر المصفوفة)
يطابق $elemMatch المستندات التي يحقق فيها عنصر مصفوفة واحد على الأقل جميع الشروط المعطاة. فالعبارة `{ scores: { $elemMatch: { $gt: 80, $lt: 90 } } }` تتطلب درجة واحدة تكون أكبر من 80 وأصغر من 90 معًا. بدون $elemMatch، تطابق استعلامات المصفوفة متعددة الشروط عبر عناصر مختلفة — وهو مأزق استعلامات المصفوفة الكلاسيكي.
| الفئة | المصفوفة |
|---|---|
| إصدار MongoDB | 1.0+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
{ <field>: { $elemMatch: { <condition1>, <condition2>, ... } } }
⚙️ المعلمات
| حقل | حقل المصفوفة المراد مطابقته. |
|---|---|
| الشرط | شروط الاستعلام التي يجب أن يستوفيها العنصر جميعًا. |
القيمة المرجعة:مؤشر المستندات المطابقة
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// $elemMatch: درجة واحدة بين 80 و90
// يجب أن يحقق العنصر نفسه الشرطين
db.students.find({ scores: { $elemMatch: { $gt: 80, $lt: 90 } } })
// خطأ: قد تطابق عبر عناصر مختلفة
// db.students.find({ scores: { $gt: 80, $lt: 90 } })
المخرجات:
// يُرجع الطلاب الذين لديهم درجة واحدة أعلى من 80 وأقل من 90
📌 ملاحظات
- يجب أن تتحقق كل الشروط لنفس العنصر — الدلالة الأساسية
- يعمل أيضًا مع مصفوفات المستندات: { $elemMatch: { name: 'A', score: { $gt: 90 } } }
- مع شرط واحد يساوي المطابقة المباشرة؛ مع عدة شروط يصبح إلزاميًا
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qما الفرق بين $elemMatch والشروط المصفوفية العادية؟
Aيمكن لـ { $gt: 80, $lt: 90 } العادي المطابقة عبر عناصر مختلفة؛ بينما يفرض $elemMatch أن يحقق عنصر واحد الشرطين معًا.
Qهل يمكن لـ $elemMatch مطابقة مصفوفات المستندات المتداخلة؟
Aنعم، اشر إلى الحقول المتداخلة، مثل { $elemMatch: { type: 'exam', score: { $gte: 90 } } }.
Qهل يمكن تطبيق $elemMatch على حقل واحد فقط؟
Aنعم، يستهدف حقل مصفوفة واحدًا؛ استخدم $elemMatch منفصلًا لكل حقل مصفوفة.