$lookup (ربط المجموعات)
آخر تحديث: 2026-10-09
$lookup (ربط المجموعات)
يُجري $lookup ربطًا خارجيًا أيسر بين المجموعة الحالية ومجموعة أخرى، مرفقًا المستندات المطابقة كمصفوفة بكل نتيجة. وهو مكافئ LEFT JOIN في SQL، ويتيح لخطوط الأنابيب دمج البيانات عبر المجموعات دون استعلامات متعددة. لاحظ أنه يدعم مطابقة المساواة فقط — دون ربط بالنطاقات أو الشروط.
| الفئة | المراحل الأساسية |
|---|---|
| إصدار MongoDB | 3.2+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
{ $lookup: { from: <collection>, localField: <local-field>, foreignField: <foreign-field>, as: <output-array> } }
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// $lookup: ربط الطلبات بالعملاء
db.orders.aggregate([
{ $lookup: {
from: "customers",
localField: "cust_id",
foreignField: "_id",
as: "customer"
} }
])
المخرجات:
{ "_id": 1, "cust_id": "A123", "customer": [{ "_id": "A123", "name": "Alice" }] }
📌 ملاحظات
- يجب أن تشير from إلى مجموعة في نفس قاعدة البيانات
- يجب أن تتطابق أسماء الحقول تمامًا وتتوافق الأنواع بين localField و foreignField
- عدم وجود مطابقة يعطي مصفوفة فارغة []، وليس null
- منذ 3.6، يدعم $lookup خط أنابيب داخلي (حقل pipeline) لربط أغنى؛ ومن 5.0 تزيل صيغة الاستعلام الفرعي المترابط المختصرة الحاجة إلى $expr
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
مسارات التجميع المتقدمة: التعبيرات والتحويلات المعقدة
مقدمة إلى مسارات التجميع: طريقة `aggregate` والمرحلة الأساسية
تجربة عملية: عمليات CRUD لنظام تعليقات المدونة
قواعد البيانات والمجموعات: إدارة مساحات الأسماء في MongoDB
الوثائق وBSON: حجر الأساس لبيانات MongoDB
$facet + $bucket + البحث النصي/الجغرافي المكاني
$lookup والارتباطات مع مجموعات متعددة
أنماط مونجوس المتقدمة: الأداء والمرونة
نماذج مونغوس وتصميم المخطط
التحقق من صحة البيانات والبرمجيات الوسيطة في Mongoose
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qهل يمكن لـ $lookup أن يحل محل JOINs على مستوى قاعدة البيانات؟
Aيحقق نتائج مشابهة، لكن $lookup يدمج البيانات وقت الاستعلام: مطابقات المساواة والمقارنات البسيطة داخل خط الأنابيب يمكنها استخدام الفهارس، لكن تحسين الربط فيه أقل شمولًا من قواعد بيانات SQL، لذا قيّم الأداء على مجموعات البيانات الكبيرة جدًا.
Qكيف أحسّن أداء $lookup؟
Aأنشئ فهرسًا على حقل المفتاح الأجنبي في المجموعة المربوطة. وفضّل $match مبكرًا في خط الأنابيب لتقليص المجموعة الرئيسية قبل الربط.
Qهل يدعم $lookup الربط بمفاتيح متعددة؟
Aنعم. منذ 3.6، تتيح صيغة خط الأنابيب في $lookup مع $expr ربطًا متعدد الحقول واستعلامات فرعية تتجاوز مساواة بسيطة على مفتاح واحد.