$bucket (المجموعات)

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

$bucket (المجموعات)

يجمع $bucket المستندات في مجموعات محددة بمصفوفة حدود تصاعدية، مصدرًا مستندًا واحدًا { _id: lowerBound, count: N } لكل مجموعة، مع مُراكمات مخرجات اختيارية. المستندات خارج كل الحدود تسقط في المجموعة الافتراضية. مثالي للمدرجات التكرارية وإحصائيات النطاق.

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

📝 الصيغة

{ $bucket: { groupBy: <expression>, boundaries: [ <lowerBound>, ... ], default: <value>, output: { <field>: <accumulator> } } }

⚙️ المعلمات

groupByتعبير يحدد الحاوية (bucket) التي يقع فيها المستند.
boundariesمصفوفة حدود الحاويات بترتيب تصاعدي، بقيمتين على الأقل.
defaultاسم الحاوية (bucket) للمستندات خارج كل الحدود؛ والمستندات المُغفَلة تُسقَط.
outputمجمِّعات تُحسب لكل حاوية (bucket)، مثل ‏$avg أو $sum.

القيمة المرجعة:مستند واحد { _id, count, ... } لكل حاوية (bucket)

▶ مثال

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

// $bucket: تقسيم الدرجات إلى نطاقات، بمتوسط لكل مجموعة
db.scores.aggregate([
  { $bucket: {
    groupBy: '$score',
    boundaries: [0, 60, 80, 100],
    default: 'other',
    output: { avg: { $avg: '$score' } }
  } }
])

المخرجات:

{ "_id": 0, "count": 12, "avg": 35.5 }
{ "_id": 60, "count": 20, "avg": 71.2 }

📌 ملاحظات

📚 دروس ذات صلة

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

Qما الفرق بين $bucket و $bucketAuto؟
Aيأخذ $bucket حدودًا صريحة؛ بينما يقسم $bucketAuto المجموعات تلقائيًا لأعداد متساوية.
Qهل النطاقات نصف مفتوحة؟
Aنعم: تقع القيم في [boundaries[i], boundaries[i+1])؛ الحد الأخير حد علوي مستبعد.
Qهل يمكن حذف المجموعة الافتراضية؟
Aنعم؛ تُسقط المستندات خارج كل المجموعات عندئذ.
Web-Tutorial.com

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

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

100%