JavaScript (كود على جانب الخادم)
آخر تحديث: 2026-10-09
JavaScript (كود على جانب الخادم)
يخزّن نوع JavaScript كود JS في مستند، يُنفَّذ على الخادم عبر `$where` (يُشغَّل لكل مستند). لا يمكن لـ `$where` استخدام الفهارس وهو بطيء — لا يصلح إلا للمجموعات الصغيرة أو منطق لا يمكن لأي عامل استعلام التعبير عنه. منذ MongoDB 8.0، تعطَّل جافاسكريبت على جانب الخادم افتراضيًا ويتطلب علم إقلاع صريحًا؛ فضّل `$expr` أو عامل التجميع `$function` في الكود الجديد.
| الفئة | أنواع BSON |
|---|---|
| إصدار MongoDB | 1.0+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
{ $where: "this.price * this.qty > 100" }
{ $expr: { $gt: [{ $multiply: ["$price", "$qty"] }, 100] } }
القيمة المرجعة:$where يُرجع المستندات التي تجتاز الشرط؛ والقيم JS المخزَّنة هي نصوص برمجية
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// JavaScript: $where من جهة الخادم
use shop
db.orders.find({ $where: 'this.price * this.qty > 1000' })
المخرجات:
// الطلبات التي price * qty > 1000 (مسح كامل للمجموعة)
📌 ملاحظات
- $where تشغّل JS لكل مستند، ولا يمكنها استخدام الفهارس، وهي بطيئة
- جافاسكريبت على جانب الخادم معطّلة افتراضيًا منذ 8.0 (فعّلها بـ --enableJavaScriptExecution)
- فضّل $expr/$function كبدائل أكثر أمانًا وكفاءة
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
مزيد من الحالات العملية قريبًا.
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qلماذا تكون $where بطيئة؟
Aتستدعي مترجم JS لكل مستند، ولا يمكنها استخدام الفهارس، وتفرض فحصًا كاملًا.
Qهل ما زالت $where تعمل في MongoDB 8.0؟
Aمعطّلة افتراضيًا؛ شغّل الخادم بـ --enableJavaScriptExecution لإعادتها.
Qكيف أعبر عن مقارنات معقدة عبر الحقول؟
Aاستخدم $expr مع عوامل تجميع مثل $multiply — قابل للتحسين وصديق للفهارس جزئيًا.