তিনটা chainable method একটা find() result-এর আকৃতি নিয়ন্ত্রণ করে: sort() এটা order করে, limit() কতগুলো document ফিরে আসে তা সীমাবদ্ধ করে, আর skip() শুরু থেকে কিছু result বাদ দেয় — pagination তৈরি করতে ব্যবহৃত combination।
Ascending-এর জন্য 1 বা descending-এর জন্য -1 সহ একটা field pass করুন:
// সবচেয়ে বয়স্ক থেকে সবচেয়ে ছোট
db.users.find().sort({ age: 1 })
// সবচেয়ে ছোট থেকে সবচেয়ে বয়স্ক
db.users.find().sort({ age: -1 })Return করা document-এর সংখ্যা সীমাবদ্ধ করে — "top 5" স্টাইলের result-এর জন্য useful, আর বড় collection একবারে সবকিছু return করা থেকে আটকাতে:
db.users.find().sort({ age: -1 }).limit(5)Result return করার আগে কিছু document skip করে — limit()-এর সাথে combine করা হলে, এটাই ঠিক কীভাবে pagination কাজ করে:
// Page 2, প্রতি page-এ ১০টা result: প্রথম ১০টা skip করুন, তারপর ১০টা নিন
db.users.find().sort({ name: 1 }).skip(10).limit(10)Shell-এ আপনি যে order-এ chain করেন তা নির্বিশেষে MongoDB সবসময় internally sort, তারপর skip, তারপর limit apply করে — কিন্তু সেই order-এ (.sort().skip().limit()) লেখা query-কে ঠিক যেভাবে এটা আচরণ করে সেভাবে পড়ায়, যা পরে অন্য কেউ আপনার code পড়লে গুরুত্বপূর্ণ।
সাধারণ pagination-এর জন্য skip() ঠিক আছে
Real pagination-এর জন্য, skip-কে (pageNumber - 1) * pageSize হিসেবে গণনা করুন। একটা খুব বড় সংখ্যক document skip করা সংখ্যা বাড়ার সাথে ধীর হয়ে যায়, কারণ MongoDB-কে এখনও skip করা প্রতিটা document অতিক্রম করতে হয় — বড় collection-এ deep pagination-এর জন্য, একটা ভিন্ন technique (cursor-based pagination) ভালো কাজ করে, কিন্তু সাধারণ page size-এর জন্য skip() ঠিক আছে।