تجميع مجموعة MongoDB

Tjmy Mjmw T Mongodb



التجميع هو إجراء لاستخراج البيانات من مجموعة MongoDB. يقوم بمعالجة العديد من المستندات ويقدم نتائج تقديرية. يحتوي التجميع في MongoDB على العديد من المشغلين والطرق التي تقوم بمهام مختلفة. من بين هذه العوامل ، يقوم عامل التشغيل $ group بتجميع المستندات لكل مجموعة فريدة وترتيبها وفقًا لتعبير محدد. يعتبر مشغل المجموعة مهمًا في MongoDB لأنه يسهل مجموعة واسعة من التلاعب بالبيانات. يتم توفير تجميع مجموعة $ في مثال MongoDB جنبًا إلى جنب مع المجمعات المختلفة أدناه.

كيف يعمل التجميع الجماعي في 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.