$cmp (المقارنة)
آخر تحديث: 2026-10-09
$cmp (المقارنة)
يقارن $cmp قيمتين ويُرجع -1 أو 0 أو 1 للأصغر أو المتساوي أو الأكبر. وهو عامل المقارنة بصيغة التعبير، يُستخدم غالبًا لمفاتيح فرز مخصصة أو فحوصات حجم داخل $cond. تتبع المقارنات ترتيب أنواع BSON، لذا لا تُسبب مقارنة أنواع مختلفة خطأً — تُرتَّب القيم حسب نوعها. على عكس $eq و $gt اللذين يُرجعان قيمًا منطقية، يُرجع $cmp نتيجة ثلاثية الاتجاهات تصلح مباشرة لمنطق الفرز أو التفرع.
| الفئة | المجموعة والشرط والتحويل |
|---|---|
| إصدار MongoDB | 1.0+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
{ $cmp: [ <expression1>, <expression2> ] }
⚙️ المعلمات
| تعبير 1 | التعبير الأول للمقارنة. |
|---|---|
| تعبير 2 | التعبير الثاني للمقارنة. |
القيمة المرجعة:-1 عندما يكون الأول أصغر، و0 عند التساوي، و1 عندما يكون أكبر
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// $cmp: مقارنة درجتين
db.scores.aggregate([
{ $project: {
result: { $cmp: ['$scoreA', '$scoreB'] }
} }
])
المخرجات:
{ '_id': 1, 'result': 1 }
{ '_id': 2, 'result': -1 }
📌 ملاحظات
- يُرجع ثلاث قيم (-1 و 0 و 1) لا قيمة منطقية
- تترتب الأنواع المختلفة بترتيب أنواع BSON دون خطأ
- يُرتَّب null قبل الأرقام في ترتيب الأنواع
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
مزيد من الحالات العملية قريبًا.
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qماذا يُرجع $cmp؟
A-1 عندما تكون الأولى أصغر، و 0 عند التساوي، و 1 عندما تكون أكبر.
Qكيف يختلفان $cmp و $eq؟
A$eq يُرجع قيمة منطقية بينما يُرجع $cmp نتيجة ثلاثية الاتجاهات تناسب الفرز والتفرع.
Qهل يُسبب $cmp خطأً عند مقارنة أنواع مختلفة؟
Aلا — يتبع ترتيب أنواع BSON، فتترتب السلاسل بعد الأرقام.