$group (تجميع المستندات)
آخر تحديث: 2026-10-09
$group (تجميع المستندات)
يجمع $group المستندات حسب مفتاح محدد (_id) ويطبق تعبيرات المُراكم ($sum/$avg/$max...) لكل مجموعة. إنها أقوى مراحل خط الأنابيب، مكافئة لـ GROUP BY في SQL. يمكن أن يكون _id مسار حقل ("$field") أو تعبيرًا مركبًا يعرّف مفتاح التجميع.
| الفئة | المراحل الأساسية |
|---|---|
| إصدار MongoDB | 1.0+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
{ $group: { _id: <group-key>, <field>: { <accumulator>: <expr> }, ... } }
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// $group: العد والإجمالي حسب الحالة
db.orders.aggregate([
{ $group: { _id: "$status", count: { $sum: 1 }, total: { $sum: "$amount" } } }
])
المخرجات:
{ "_id": "A", "count": 2, "total": 380 }
{ "_id": "B", "count": 1, "total": 130 }
📌 ملاحظات
- _id مطلوب؛ استخدم null لتجميع كل المستندات
- حقول المخرجات لا يمكن أن تكون إلا مُراكمات أو تعبير _id؛ استرجع حقول المصدر عبر $first/$last
- $group يكسر ترتيب المستندات؛ أعد الفرز بـ $sort بعد ذلك إذا لزم
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
مسارات التجميع المتقدمة: التعبيرات والتحويلات المعقدة
مقدمة إلى مسارات التجميع: طريقة `aggregate` والمرحلة الأساسية
تجربة عملية: عمليات CRUD لنظام تعليقات المدونة
تدفقات التغييرات: مراقبة التغييرات في الوقت الفعلي
$facet + $bucket + البحث النصي/الجغرافي المكاني
$lookup والارتباطات مع مجموعات متعددة
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qهل $group مكافئ تمامًا لـ GROUP BY في SQL؟
Aمكافئ جوهريًا، لكنه أكثر مرونة: يمكن أن يكون _id أي تعبير، والأعمدة غير المُجمَّعة يجب استرجاعها عبر $first/$push بدلًا من اختيارها مباشرة.
Qهل _id مطلوب في $group؟
Aنعم. يعرّف _id مفتاح التجميع ويمكن أن يكون حقلًا أو تعبيرًا أو كائنًا مركبًا؛ تمرير null يجمع كل المستندات في مجموعة واحدة.
Qهل ترتيب حقول مخرجات $group مستقر؟
Aلا يضمن MongoDB ترتيب مخرجات $group ولا تسلسل التجميع. أضف مرحلة $sort بعد ذلك لفرض الترتيب.