با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ،در این جلسه از آموزش های دوره MongoDB با مبحث توابع جمعی در MongoDB و مفهوم Pipeline در MongoDB آشنا می شوید.برای توابع جمعی در MongoDB باید از متد ()aggregate استفاده کنید.
سینتکس پایه برای این متد به شکل زیر است :
1 | >db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION) |
مثال
در این مجموعه شما داده های زیر را دارید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | { _id: ObjectId(7df78ad8902c) title: 'MongoDB Overview', description: 'MongoDB is no sql database', by_user: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }, { _id: ObjectId(7df78ad8902d) title: 'NoSQL Overview', description: 'No sql database is very fast', by_user: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 10 }, { _id: ObjectId(7df78ad8902e) title: 'Neo4j Overview', description: 'Neo4j is no sql database', by_user: 'Neo4j', url: 'http://www.neo4j.com', tags: ['neo4j', 'database', 'NoSQL'], likes: 750 }, |
اکنون اگر بخواهید از مجموعهی بالا لیستی از تعداد دورههای نوشته شده توسط هر کاربر را نمایش دهید و استخراج کنید، باید ار متد ()aggregate به صورت زیر استفاده کنید :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | > db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}]) { "result" : [ { "_id" : "tutorials point", "num_tutorial" : 2 }, { "_id" : "Neo4j", "num_tutorial" : 1 } ], "ok" : 1 } > |
معادل کوئری بالا در sql به این شکل خواهد بود: (*)select by_user, count
در مثال بالا، سندهای گروه بندی شده توسط فیلد by_user را داریم و در هر اجرای by_user مقدار قبلی جمع کلی افزایش مییابد.
در اینجا لیست عبارتهای جمعی موجود، آمده است.
عبارت | توضیحات | مثال | ||
$sum | مقدار تعیین شده همه سندهای مجموعه را جمع میکند. | مثال :
| ||
$avg | میانگین همه مقادیر بدست آمده از سندهای مجموعه را محاسبه میکند. | مثال :
| ||
$min | کمترین مقادیر را از همه سندهای مجموعه، بر میگرداند. | مثال :
| ||
$max | بیشترین مقادیر را از همه سندهای مجموعه، بر میگرداند. | مثال :
| ||
$push | مقدار را در سند نتیجه، در یک آرایه درج میکند. | مثال :
| ||
$addToSet | یک مقدار را در سند نتیجه در یک آرایه درج میکند، با این تفاوت که مقدار تکراری ایجاد نمیکند. | مثال :
| ||
$first | اولین سند از اسناد را طبق گروه بندی باز میگرداند.این عبارت بعد از عبارتهای مرتب سازی مرحلهای استفاده میشود. | مثال :
| ||
$last | آخرین سند از اسناد را طبق گروه بندی باز میگرداند.این عبارت بعد از عبارتهای مرتب سازی مرحلهای استفاده میشود. | مثال :
|
به طور کلی عملیات جمعی مقادیر چندین سند را باهم گروه بندی میکند و میتواند یک نوع از عملگرها را روی اطلاعات دسته بندی شده انجام دهد تا یک نتیجهی واحد را برگرداند.
navidrezadoost
سلام ممنونم از مقاله خوب تون
من میخواستم aggregate رو روی اطلاعات یک کاربر اعمال کنم
میخوام رابطه خاصی رو از اطلاعات کاربرم lookup کنم
میخوام این عملیات ها روی یک کاربر اعمال بشه