$graphLookup (بحث رسومي)

آخر تحديث: 2026-10-09

$graphLookup (بحث رسومي)

يُجري $graphLookup عمليات بحث متكررة على مجموعة، محاكيًا اجتياز الرسوم البيانية: بدءًا من قيم connectFromField، يطابق connectToField بشكل متكرر حتى maxDepth أو عدم وجود مطابقات أخرى، مخزنًا النتائج في as. مثالي للمخططات التنظيمية وأشجار التصنيف وعدّ القفزات. وعلى خلاف $lookup، يتكرر عبر عمق تعسفي.

الفئةالمتقدم والتشخيص
إصدار MongoDB1.0+
لغة المثالmongosh (الطرفية)

📝 الصيغة

{ $graphLookup: { from: "<collection>", startWith: <expression>, connectFromField: "<field>", connectToField: "<field>", as: "<outputField>", maxDepth: <number>, depthField: "<depthField>" } }

⚙️ المعلمات

fromالمجموعة الهدف للبحث التكراري.
startWithتعبير القيمة التي تبدأ التكرار.
connectFromFieldالحقل في المستند الحالي الذي يحمل القيمة المطابقة.
connectToFieldالحقل في المجموعة الهدف الذي تتم مطابقته.
asاسم الحقل الذي يستقبل نتائج التكرار.
maxDepthأقصى عمق للتكرار؛ غير محدود عند إغفاله.

القيمة المرجعة:كل مستند مُعزَّز بمصفوفة نتائج التكرار

▶ مثال

نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):

// $graphLookup: بناء سلسلة التقارير لكل موظف
db.employees.aggregate([
  { $graphLookup: {
    from: 'employees',
    startWith: '$reportsTo',
    connectFromField: 'reportsTo',
    connectToField: 'name',
    as: 'chain'
  } }
])

المخرجات:

// كل مستند موظف يكتسب مصفوفة chain من المديرين

📌 ملاحظات

مزيد من الحالات العملية قريبًا.

📚 دروس ذات صلة

❓ الأسئلة الشائعة

Qما الفرق بين $graphLookup و $lookup؟
Aيربط $lookup مستوى واحدًا؛ بينما يتكرر $graphLookup عبر مستويات عديدة.
Qهل يمكن أن يلتف التكرار إلى الأبد؟
Aيتكرر حتى عدم وجود مطابقات؛ حدّه بـ maxDepth.
Qهل تتضمن النتيجة المستند نفسه؟
Aلا. startWith هو البذرة؛ النتائج مستندات أخرى تطابقها.
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%