$facet (تجميع متعدد الأوجه)

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

$facet (تجميع متعدد الأوجه)

يشغّل $facet عدة خطوط أنابيب فرعية بالتوازي داخل مرحلة واحدة، كلٌّ منها يعالج نفس مستندات الإدخال، دامجًا النتائج كحقول: { name: [ results ] }. احصل على إحصائيات ملخصة وقوائم تفصيلية وأعلى-N في طلب واحد بدلًا من عدة جولات. خطوط الأنابيب الفرعية مستقلة.

الفئةالتجميع والنافذة
إصدار MongoDB1.0+
لغة المثالmongosh (الطرفية)

📝 الصيغة

{ $facet: { <outputField1>: [ <sub-pipeline1> ], <outputField2>: [ <sub-pipeline2> ] } }

⚙️ المعلمات

خط أنابيب فرعيأسماء الحقول مربوطة بمصفوفات خطوط أنابيب فرعية، يعالج كل منها الإدخال على حدة.

القيمة المرجعة:مستند واحد تحمل حقوله مصفوفة نتائج كل خط أنابيب فرعي

▶ مثال

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

// $facet: تحليل الحالة بالإضافة إلى أعلى 5 حسب المبلغ
db.orders.aggregate([
  { $facet: {
    byStatus: [{ $group: { _id: '$status', n: { $sum: 1 } } }],
    top5: [{ $sort: { amount: -1 } }, { $limit: 5 }]
  } }
])

المخرجات:

{ "byStatus": [ { "_id": "A", "n": 20 } ], "top5": [ { ... } ] }

📌 ملاحظات

📚 دروس ذات صلة

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

Qهل يمكن لخطوط الأنابيب الفرعية الفرز داخل $facet؟
Aنعم، يمكن لخطوط الأنابيب الفرعية استخدام مراحل عادية مثل $sort و $limit.
Qهل $facet أسرع من استدعاءات aggregate متعددة؟
Aعادة نعم: تمريرة واحدة تخدم عدة تجميعات، قاطعةً الإدخال/الإخراج والجولات.
Qما شكل مخرجات $facet؟
Aمستند واحد؛ كل اسم خط أنابيب فرعي يقابل مصفوفة نتائج.
Web-Tutorial.com

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

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

100%