English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

جمع MongoDB

تحليل العمليات تعالج سجلات البيانات وتعيد النتائج المحسوبة. تحليل العمليات تجمع القيم من وثائق متعددة معًا وتسمح بإجراء各种 عمليات على البيانات المجمعة لتقديم نتيجة واحدة. في SQL، count(*) و group by يساويان التجميع في MongoDB.

طريقة Aggregate()

للتحكم في التجميع في MongoDB، يجب استخدامه aggregate() الطريقة.

النحو

aggregate()جملة الأساس للطريقة هي-

>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

نموذج افتراضي

في المجموعة، لديك البيانات التالية-

{
   _id: ObjectId(7df78ad8902c)
   title: نظرة عامة على MongoDB 
   description: MongoDB ليست قاعدة بيانات SQL
   by_user: oldtoolbag.com
   url: https://ar.oldtoolbag.com
   tags: ['mongodb', 'database', 'NoSQL']
   likes: 100
},
{
   _id: ObjectId(7df78ad8902d)
   title: نظرة عامة على NoSQL 
   description: قاعدة بيانات No SQL هي سريعة جدًا
   by_user: oldtoolbag.com
   url: https://ar.oldtoolbag.com
   tags: ['mongodb', 'database', 'NoSQL']
   likes: 10
},
{
   _id: ObjectId(7df78ad8902e)
   title: نظرة عامة على Neo4j 
   description: Neo4j هو قاعدة بيانات No SQL
   by_user: Neo4j
   url: https://www.neo4j.com
   tags: ['neo4j', 'database', 'NoSQL'],
   likes: 750
},

الآن، إذا كنت ترغب في عرض قائمة، توضح عدد الدروس التي كتبها كل مستخدم، فستستخدم ما يليaggregate()طريقة-

> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
{ "_id" : "oldtoolbag.com", "num_tutorial" : 2 }
{ "_id" : "Neo4j", "num_tutorial" : 1 }
>

استعلام SQL المماثل للنموذج أعلاه سيكون select by_user, count(*) from mycol group by by_user.

في المثال السابق، قمنا بفرز حقلby_userتم فرز الوثائق، وفي كل مرة يتم فرزها بناءً على المستخدم، يتم زيادة القيمة المجمعة السابقة. إليك قائمة بالعبارات التجميعية المتاحة.

عبرةوصفمثال
$sumحساب إجمالي.db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avgحساب القيمة المتوسطةdb.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$minالحصول على أصغر قيمة من القيم المتباينة في المجموعة.db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$maxالحصول على أكبر قيمة من القيم المتباينة في المجموعة.db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$pushفي مستندات النتائج، أضف قيمة إلى مجموعة.db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSetارزشی را به یک آرایه اضافه می‌کند، اما کپی ایجاد نمی‌کند.db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$firstداده‌های مستند اولین مستند بر اساس مرتب‌سازی منابع دریافت می‌شود.db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$lastداده‌های مستند آخرین مستند بر اساس مرتب‌سازی منابع دریافت می‌شودdb.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])

مفهوم پالس

پالس‌ها در Unix و Linux معمولاً برای استفاده از خروجی یک دستور به عنوان ورودی دستور بعدی استفاده می‌شوند.

پالس‌های جمع‌آوری MongoDB مستندات MongoDB را در یک پالس به پایان می‌رسانند و نتایج را به پالس بعدی منتقل می‌کنند. عملکرد پالس می‌تواند تکرار شود.

عبارت: مستند ورودی را پردازش کرده و خروجی می‌دهد. عبارت بدون حالت است و فقط برای محاسبه مستندات در پالس‌های جمع‌آوری فعلی استفاده می‌شود و نمی‌تواند مستندات دیگر را پردازش کند.

در اینجا چندین عملکرد معمول در چارچوب جمع‌آوری معرفی می‌شود:

  • $project: ساختار مستند ورودی را تغییر می‌دهد. می‌توان از آن برای تغییر نام فیلد‌ها، اضافه کردن یا حذف فیلد‌ها استفاده کرد، همچنین می‌توان از آن برای ایجاد نتایج محاسباتی و مستند‌های توالی‌مند استفاده کرد.

  • $match: برای فیلتر کردن داده‌ها استفاده می‌شود، فقط مستندات مشروط را خروجی می‌دهد. $match از عملیات استاندارد جستجوی MongoDB استفاده می‌کند.

  • $limit: برای محدود کردن تعداد مستندات بازگردانده شده توسط پالس‌های جمع‌آوری MongoDB استفاده می‌شود.

  • $skip: در پالس‌های جمع‌آوری، تعداد مشخصی مستند را از دست می‌دهد و مستندات باقی‌مانده را بازمی‌گرداند.

  • $unwind: یک فیلد نوع آرایه مستند را به چندین مستند مختلف تقسیم می‌کند، هر مستند شامل یک ارزش از آرایه است.

  • $group: مستندات موجود در مجموعه را به گروه‌های مختلف تقسیم می‌کند، که می‌توان از آن برای نتایج آماری استفاده کرد.

  • $sort: ورودی‌های مرتب شده را خروجی دهید.

  • $geoNear: خروجی‌های مرتب شده به نزدیکی یک مکان جغرافیایی.

مثال عملگر پالس

1、مثال $project

db.article.aggregate(
    { $project : {
        title : 1 ,
        author : 1 ,
    }}
 );

به این ترتیب در نتیجه فقط فیلدهای _id، tilte و author باقی می‌مانند، به صورت پیش‌فرض فیلد _id شامل می‌شود، اگر نمی‌خواهید _id شامل شود، می‌توانید به این صورت عمل کنید:

db.article.aggregate(
    { $project : {
        _id : 0 ,
        title : 1 ,
        author : 1
    }});

2. مثال $match

db.articles.aggregate( [
                        { $match : { score : { $gt : 70, $lte : 90 } } },
                        { $group: { _id: null, count: { $sum: 1 } } }
                       ] );

$match يستخدم لجلب السجلات ذات الدرجات بين 70 و90، ثم إرسال السجلات المرضية إلى الخطوة التالية $group من وسيط التجميع.

3. مثال $skip

db.article.aggregate(
    { $skip : 5 });

بعد معالجة وسيط $skip، تم "تصفية" خمس مستندات أولى.