$graphLookup (بحث رسومي)
آخر تحديث: 2026-10-09
$graphLookup (بحث رسومي)
يُجري $graphLookup عمليات بحث متكررة على مجموعة، محاكيًا اجتياز الرسوم البيانية: بدءًا من قيم connectFromField، يطابق connectToField بشكل متكرر حتى maxDepth أو عدم وجود مطابقات أخرى، مخزنًا النتائج في as. مثالي للمخططات التنظيمية وأشجار التصنيف وعدّ القفزات. وعلى خلاف $lookup، يتكرر عبر عمق تعسفي.
| الفئة | المتقدم والتشخيص |
|---|---|
| إصدار MongoDB | 1.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 من المديرين
📌 ملاحظات
- فهرس connectToField لتسريع التكرار
- النتائج تشمل المستندات المطابقة المتكررة، وليس المستند البادئ
- maxDepth بقيمة 0 يطابق مستوى واحدًا فقط
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
مزيد من الحالات العملية قريبًا.
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qما الفرق بين $graphLookup و $lookup؟
Aيربط $lookup مستوى واحدًا؛ بينما يتكرر $graphLookup عبر مستويات عديدة.
Qهل يمكن أن يلتف التكرار إلى الأبد؟
Aيتكرر حتى عدم وجود مطابقات؛ حدّه بـ maxDepth.
Qهل تتضمن النتيجة المستند نفسه؟
Aلا. startWith هو البذرة؛ النتائج مستندات أخرى تطابقها.