رفتن به نوشته‌ها

دسته: MongoDB (مونگو دی‌بی)

آشنایی با اپراتور bucket$ در فریم‌ورک aggregation

ما در جلسه ی قبل موفق شدیم با تغییر داده ها دقیقا نتیجه ی مورد نظر خود را از یک آرایه استخراج کنیم اما در این جلسه با اپراتور جدیدی به نام bucket$ آشنا خواهیم شد. من در این جلسه می خواهم از کالکشن persons استفاده کنم. اگر یادتان باشد این کالکشن در پایگاه داده ی analytics قرار داشت بنابراین برای استفاده از آن می گوییم: use analytics سپس در تمامی دستورات بعدی نام db.persons را می آوریم. جهت یادآوری باید بگویم که ساختار هر سند در این کالکشن به صورت زیر بود. bucket$ به شما اجازه می دهد که بیشتر با نحوه ی توزیع داده هایتان آشنا شوید. در واقع این اپراتور داده های شما را در گروه های خاصی قرار می دهد که به آن ها bucket (به معنی «سطل») می گوییم و سپس شما می توانید هر کاری خواستید روی این bucket ها انجام بدهید. بهتر است اپراتور bucket$ و کارایی آن را در عمل به شما نشان بدهم: بگذارید اجزای این کوئری را برایتان توضیح بدهم: اولین آرگومان bucket$ دستورِ groupBy است که مشخص می کند معیار دسته بندی داده ها در bucket های مختلف چیست؟ ما بر اساس کدام فیلد باید داده ها را جدا کنیم؟ آرگومان بعدی boundaries است که مشخص کننده ی جفت های عددی برای فیلد age است. یعنی هر دو عدد کنار هم در این آرگومان، یک جفت حساب می شوند که اولی حداقل و دومی حداکثر را مشخص می کند بنابراین در کد بالا گفته ایم که داده هایمان باید در 3 گروه سنی (به خاطر groupBy که روی Age است) دسته بندی شود: دسته ی اول افراد 0 تا 18 سال هستند و دسته ی دوم 30 تا 50 سال و دسته ی سوم 80 تا 120 سال. یادتان باشد که بازه های تعریف شده در این آرگومان همیشه باید صعودی باشند و نمی توانید نزولی کار کنید. آرگومان بعدی output است. در حالت عادی و بدون output، کوئری بالا فقط تعداد افراد درون هر bucket را مشخص می کند اما اگر output را به آن بدهیم، نتیجه را کامل برمی گرداند. در output باید مشخص کنید که چه فیلد هایی باید برگردانده شوند که من 3 فیلد را مشخص کرده ام. اول تعداد افراد هر bucket که به sum$ محاسبه می شود و در مورد آن صحبت کرده ایم. دوم میانگین سنی افراد که با اپراتور avg$ محاسبه می شود. سوم نام های افراد در هر bucket که با اپراتور push$ قابل انجام است.