كيف يعمل التجميع الجماعي في MongoDB؟
يجب استخدام عامل المجموعة $ لتجميع مستندات الإدخال وفقًا لتعبير _id المحدد. يجب أن تقوم بعد ذلك بإرجاع مستند واحد يحتوي على القيم الإجمالية لكل مجموعة منفصلة. لبدء التنفيذ ، أنشأنا مجموعة 'الكتب' في MongoDB. بعد إنشاء مجموعة 'الكتب' ، قمنا بإدخال المستندات المرتبطة بالمجالات المختلفة. يتم إدراج المستندات في المجموعة عبر طريقة insertMany () حيث يظهر الاستعلام المراد تنفيذه أدناه.
> db.Books.insertMany ([{
_id: 1 ،
العنوان: 'آنا كارنينا' ،
السعر: 290 ،
سنة: 1879،
order_status: 'في المخزن' ،
مؤلف: {
'الاسم': 'ليو تولستوي'
}
} ،
{
_id: 2 ،
العنوان: 'To Kill a Mockingbird' ،
السعر: 500 ،
سنة: 1960،
order_status: 'غير متوفر' ،
مؤلف: {
'الاسم': 'هاربر لي'
}
} ،
{
_id: 3 ،
العنوان: 'الرجل الخفي' ،
السعر: 312 ،
سنة: 1953
order_status: 'متوفر' ،
مؤلف: {
'الاسم': 'رالف إليسون'
}
} ،
{
_id: 4 ،
العنوان: 'الحبيب' ،
السعر: 370 ،
سنة: 1873،
order_status: 'out_of_stock' ،
مؤلف: {
'الاسم': 'توني موريسون'
}
} ،
{
_id: 5 ،
العنوان: 'الأشياء تتداعى' ،
السعر: 200 ،
سنة: 1958،
order_status: 'متوفر' ،
مؤلف: {
'الاسم': 'تشينوا أتشيبي'
}
} ،
{
_id: 6 ،
العنوان: 'اللون البنفسجي' ،
السعر: 510 ،
سنة: 1982،
order_status: 'غير متوفر' ،
مؤلف: {
'الاسم': 'أليس والكر'
}
}
])
يتم تخزين المستندات بنجاح في مجموعة 'الكتب' دون مواجهة أي خطأ لأن الإخراج معترف به على أنه 'صحيح'. الآن ، سنستخدم هذه المستندات الخاصة بمجموعة 'الكتب' لأداء تجميع '$ group'.
المثال رقم 1: استخدام تجميع المجموعة $
يتم هنا توضيح الاستخدام البسيط لتجميع $ group. يقوم الاستعلام التجميعي بإدخال عامل التشغيل '$ group' أولاً ثم يأخذ عامل التشغيل '$ group' التعبيرات لإنشاء المستندات المجمعة.
> db.Books.aggregate ([
{$ group: {_id: '$ author.name'}}
])
تم تحديد الاستعلام أعلاه لعامل التشغيل $ group مع الحقل '_id' لحساب القيم الإجمالية لجميع مستندات الإدخال. بعد ذلك ، يتم تخصيص الحقل '_id' مع '$ author.name' والذي يشكل مجموعة مختلفة في الحقل '_id'. سيتم إرجاع القيم المنفصلة لـ $ author.name لأننا لا نحسب أي قيم متراكمة. ينتج عن تنفيذ الاستعلام التجميعي $ group ما يلي. يحتوي الحقل _id على قيم أسماء المؤلفين.
مثال رقم 2: استخدام تجميع المجموعة $ مع تراكم $ push
مثال تجميع $ group يستخدم أي تراكم سبق ذكره أعلاه. ولكن يمكننا استخدام المُجمِّعات في تجميع $ group. عوامل التشغيل المجمعة هي تلك التي يتم استخدامها في حقول مستندات الإدخال بخلاف تلك التي يتم 'تجميعها' ضمن '_id'. لنفترض أننا نريد دفع حقول التعبير إلى مصفوفة ثم يتم استدعاء المركب '$ push' في عامل التشغيل '$ group'. سيساعدك هذا المثال على فهم تراكم '$ push' لـ '$ group' بشكل أكثر وضوحًا.
> db.Books.aggregate ([
{$ group: {_id: '$ _id'، السنة: {$ push: '$ year'}}}
]
).جميل()؛
هنا ، نريد تجميع تاريخ السنة المنشورة للكتب المعينة في المصفوفة. يجب تطبيق الاستعلام أعلاه لإنجاز ذلك. يتم توفير استعلام التجميع مع التعبير حيث يأخذ عامل التشغيل '$ group' تعبير الحقل '_id' وتعبير الحقل 'year' للحصول على سنة المجموعة باستخدام مجمع الدفع $. الناتج المسترجع من هذا الاستعلام المحدد ينشئ مصفوفة حقول السنة ويخزن المستند المجمع المرتجع بداخله.
مثال # 3: استخدام تجميع المجموعة $ مع تراكم '$ min'
بعد ذلك ، لدينا تراكم '$ min' الذي يتم استخدامه في تجميع مجموعة $ للحصول على الحد الأدنى من قيمة المطابقة من كل مستند في المجموعة. فيما يلي تعبير استعلام عن تراكم $ min.
> db.Books.aggregate ([{
مجموعة $: {
_هوية شخصية:{
العنوان: '$ title'،
order_status: '$ order_status'
} ،
السعر الأدنى: {$ min: '$ price'}
}
}
])
يحتوي الاستعلام على تعبير التجميع '$ group' حيث قمنا بتجميع المستند لحقلي 'title' و 'order_status'. بعد ذلك ، قدمنا تراكم $ min الذي جمع المستندات عن طريق الحصول على قيم السعر الأدنى من الحقول غير المجمعة. عندما نقوم بتشغيل هذا الاستعلام عن تراكم $ min أدناه ، فإنه يقوم بإرجاع المستندات المجمعة حسب العنوان و order_status في تسلسل. يظهر الحد الأدنى للسعر أولاً ، ويتم وضع أعلى سعر للمستند أخيرًا.
مثال # 4: استخدم تجميع المجموعة $ مع تراكم $ sum
للحصول على مجموع كل الحقول الرقمية باستخدام عامل التشغيل $ group ، يتم نشر عملية تراكم $ sum. يعتبر هذا المجمع القيم غير الرقمية في المجموعات. بالإضافة إلى ذلك ، نستخدم تجميع مطابقة $ هنا مع تجميع $ group. يقبل تجميع مطابقة $ شروط الاستعلام الواردة في المستند ويمرر المستند المطابق إلى تجميع $ group الذي يقوم بعد ذلك بإرجاع مجموع المستند لكل مجموعة. بالنسبة لمجمع $ sum ، يتم عرض الاستعلام أدناه.
> db.Books.aggregate ([{$ match: {order_status: 'In-Stock'}}،
{$ group: {_id: '$ author.name'، totalBooks: {$ sum: 1}}
}])
يبدأ استعلام التجميع أعلاه بعامل مطابقة $ الذي يطابق جميع 'order_status' التي تكون حالتها 'في المخزن' ويتم تمريرها إلى مجموعة $ كمدخل. بعد ذلك ، يكون لمشغل المجموعة $ تعبير تراكمي $ sum الذي ينتج مجموع كل الكتب الموجودة في المخزون. لاحظ أن '$ sum: 1' تضيف 1 لكل مستند ينتمي إلى نفس المجموعة. أظهر الإخراج هنا وثيقتين مجمعتين فقط لها 'order_status' المرتبطة بـ 'In-Stock'.
مثال رقم 5: استخدم تجميع المجموعة $ مع تجميع الترتيب بالدولار
يتم استخدام عامل التشغيل $ group هنا مع عامل التشغيل '$ sort' الذي يستخدم لفرز المستندات المجمعة. يحتوي الاستعلام التالي على ثلاث خطوات لعملية الفرز. الأول هو مرحلة $ match ، ثم $ group stage ، والأخير هو $ sort stage الذي يفرز الوثيقة المجمعة.
> db.Books.aggregate ([{$ match: {order_status: 'out-of-stock'}}،
{$ group: {_id: {authorName: '$ author.name'}، totalBooks: {$ sum: 1}}}،
{$ sort: {authorName: 1}}
])
هنا ، قمنا بإحضار المستند المطابق الذي نفد 'order_status' الخاص به. بعد ذلك ، يتم إدخال المستند المطابق في مرحلة المجموعة $ التي جمعت المستند مع الحقل 'authorName' و 'totalBooks'. يرتبط تعبير مجموعة $ مع تراكم $ sum بإجمالي عدد الكتب 'غير المتوفرة بالمخزون'. ثم يتم فرز المستندات المجمعة باستخدام تعبير الفرز $ بترتيب تصاعدي حيث يشير '1' هنا إلى الترتيب التصاعدي. يتم الحصول على مستند المجموعة التي تم فرزها بالترتيب المحدد في الإخراج التالي.
مثال رقم 6: استخدم تجميع المجموعة $ للقيمة المميزة
يقوم إجراء التجميع أيضًا بتجميع المستندات حسب العنصر باستخدام عامل التشغيل $ group لاستخراج قيم العناصر المميزة. دعونا نحصل على تعبير الاستعلام عن هذا البيان في MongoDB.
> db.Books.aggregate ([{$ group: {_id: '$ title'}}]) .pretty ()؛يتم تطبيق استعلام التجميع على مجموعة الكتب للحصول على القيمة المميزة لمستند المجموعة. تأخذ المجموعة $ هنا التعبير _id الذي ينتج القيم المميزة حيث أدخلنا حقل 'العنوان' إليها. يتم الحصول على مخرجات مستند المجموعة عند تشغيل هذا الاستعلام الذي يحتوي على مجموعة أسماء العناوين مقابل الحقل _id.
استنتاج
يهدف الدليل إلى توضيح مفهوم عامل التجميع $ group لتجميع المستند في قاعدة بيانات MongoDB. يعمل نهج التجميع MongoDB على تحسين ظاهرة التجميع. يتم توضيح بنية بناء جملة عامل التشغيل $ group مع أمثلة البرامج. بالإضافة إلى المثال الأساسي لمشغلي المجموعة $ ، فقد استخدمنا أيضًا هذا العامل مع بعض المجمعات مثل $ push و $ min و $ sum والمشغلين مثل $ match و $ sort.