$expr (استعلام بتعبيرات التجميع)
آخر تحديث: 2026-10-09
$expr (استعلام بتعبيرات التجميع)
يتيح $expr لمسندات الاستعلام استخدام تعبيرات التجميع — لمقارنة حقول متعددة من المستند نفسه أو استدعاء عوامل التجميع. فالعبارة `{ $expr: { $gt: ['$price', '$cost'] } }` تجد المنتجات التي سعرها أعلى من التكلفة؛ والبادئة $ تشير إلى قيم الحقول. لا يمكن لـ $expr عمومًا استخدام الفهارس (دعم جزئي منذ MongoDB 6.0)، لذا استخدمه بحذر على المجموعات الكبيرة.
| الفئة | العنصر والتقييم |
|---|---|
| إصدار MongoDB | 3.6+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
{ $expr: { <aggregation expression> } }
⚙️ المعلمات
| تعبير التجميع | تعبير تجميع، مثل { $gt: ['$price', '$cost'] }؛ ويشير $ إلى قيم الحقول. |
|---|
القيمة المرجعة:مؤشر المستندات المطابقة
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// $expr: المنتجات التي سعرها أعلى من التكلفة
// $price يشير إلى قيمة الحقل
db.products.find({ $expr: { $gt: ['$price', '$cost'] } })
// مقارنة حقلين من حيث المساواة
db.users.find({ $expr: { $eq: ['$email', '$username'] } })
المخرجات:
// يُرجع المنتجات التي يتجاوز سعرها التكلفة؛ والمستخدمين الذين يساوي بريدهم اسم المستخدم
📌 ملاحظات
- البادئة $ تشير إلى قيم الحقول، مثلما في خطوط أنابيب التجميع
- لا يمكنه عمومًا استخدام الفهارس؛ دعم جزئي منذ 6.0
- فضّل العوامل العادية كلما أمكنها التعبير عن الاستعلام
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qكيف يقارن $expr حقلين من مستند واحد؟
Aاشِر إلى الحقول بـ $: { $expr: { $gt: ['$price', '$cost'] } }.
Qهل يمكن لـ $expr استخدام فهرس؟
Aعادة لا؛ منذ MongoDB 6.0 يمكن لبعض الحالات (مثل مقارنات النطاق) استخدام فهرس.
Qما الفرق بين $expr و $where؟
Aيستخدم $expr تعبيرات التجميع (موصى به)؛ بينما يشغّل $where جافاسكربت (بطيء، بدون فهارس).