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

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

تابع limit و استفاده از projection در MongoDB

در جلسه ی قبل با دستورات مختلفی از قبیل sort و skip آشنا شدیم. یکی دیگر از توابعی که باید با آن آشنا بشویم، تابع limit است. تابع limit (به معنی «محدودیت») مسئول محدود کردن تعداد سند هایی است که یک cursor دریافت می کند. قطعا زمانی که تعداد اسناد درون cursor محدود شود، مثلا فقط 20 مورد باشد، ما نیز به همان 20 مورد دسترسی خواهیم داشت و برای موارد بعدی باید دوباره کوئری بزنیم. به مثال زیر توجه کنید. این کوئری 100 مورد اول را skip می کند (نادیده می گیرد) و سپس فقط 10 مورد بعدی را دریافت می کند. اگر کوئری بالا را بدون limit صدا بزنید، عبارت Type “it” for more را در انتهای نتایج دریافت می کنید چرا که Cursor شما تمام اطلاعات را دریافت کرده است بنابراین با نمایش 20 عدد از آن ها به انتهایش نرسیده ایم اما زمانی که کوئری بالا را (با limit) اجرا کنید دیگر Type “it” for more را نمی بینید. چرا؟ به دلیل اینکه کل cursor ما 10 سند را برمی گرداند و shell در هر کوئری Find، بیست نتیجه را نشان می دهد بنابراین 10 مورد مشخص شده نمایش داده می شوند و دیگر قرار نیست چیزی نمایش داده شود. آیا مثال pagination از جلسه ی قبل را به یاد دارید؟ من در آن جلسه گفتم که فرض کنید سایت شما pagination (صفحه بندی مطالب سایت – مثلا در نتایج جست و جو در گوگل که 10 نتیجه ی اول و سپس 10 نتیجه ی دوم و الی آخر را داریم) دارد و در هر صفحه 10 پست نمایش داده می شود. حالا اگر کاربر در صفحه ی دوم باشد، ما باید 10 پست اول را نادیده بگیریم. برای انجام این کار skip کردن 10 نتیجه ی اول کافی نیست. چرا؟ اگر فقط 10 نتیجه ی اول را Skip کنیم یعنی از نتیجه ی 11 تا آخرین نتیجه در کالکشن (حتی اگر نتیجه ی هزارم باشد) را دریافت می کنیم! بنابراین در مثال pagination حتما باید Skip و limit را با هم داشته باشیم.