رسیدیم به مبحث aggregation ها، در مانگون دی بی (مثلا اکثر دیتابیس های دیگه) میتونیم یک سری از داده ها رو با هم گروه کنیم و یه سری محاسبات روی اون انجام بدیم و نتیجه رو بخونیم. مثلا یه کالکشن از مطالب وبسایت مون داریم، هر داکیومنت توی این کالکشن یک فیلد به نام author داره که نویسنده ی اون پست رو مشخص میکنه. فرض کنید میخواهیم ببینیم هر نویسنده چند تا پست توی سایت ما نوشته، به این صورت کوئری میزنیم:
db.posts.aggregate([ { $group: {"author":"author", "postsNumber": { $sum: 1 } } } ] )
توی کد بالا با استفاده از تابع aggregate میایم بهش میگیم که بر اساس author داکیومنت ها رو از هم جدا کن و تعداشون رو با هم sum کن و توی یه فیلد به نام postsNumber به من برگردون. یعنی به عنوان مثال میاد تمام داکیومنت هایی که نویسنده شون reza بوده رو گروه میکنه و تعدادشون رو به ما میده.
توی یه مثال دیگه فرض کنید داکیومنت های زیر رو توی کالکشن users داریم:
حالا میخوایم میانگین نمرات همه ی کاربران یعنی میانگین فیلد grade رو حساب کنیم:
توجه کنید که توی group حتما باید فیلد id_ مشخص بشه، ما اینجا چون نمیخواستیم بر اساس id گروه بندی کنه و کل داکیومنت ها رو در نظر بگیره بهش مقدار null دادیم.
یکسری aggregation های آماده هم توی مانگو بصورت فانکشن وجود داره، مثل countDocuments که تعدادا کل داکیومنت های یک کالکشن رو نشون میده، تابع estimatedDocumentCount هم تعداد رو تخمین میزنه ( برای دیتابیس های با حجم بالا):
برای اطلاعات بیشتر مستندات مانگو دی بی رو مطالعه کنید:
https://docs.mongodb.com/manual/aggregation/