MongoDB সর্টিং করে sort এর মাধ্যমে এবং পেজিনেশন করে limit এবং skip দিয়ে — যা find কার্সরের সাথে চেইন করা হয়। একসাথে তারা ক্রম নির্ধারণ এবং ডেটার পৃষ্ঠা প্রদান করে, যা ফলাফল প্রদর্শনের জন্য অপরিহার্য।
MongoDB সর্টিং করে sort এর মাধ্যমে এবং পেজিনেশন করে limit এবং skip দিয়ে — যা find কার্সরের সাথে চেইন করা হয়। একসাথে তারা ক্রম নির্ধারণ এবং ডেটার পৃষ্ঠা প্রদান করে, যা ফলাফল প্রদর্শনের জন্য অপরিহার্য।
db.users.find().sort({ age: 1 }); // ascending by age (1 = asc)
db.users.find().sort({ age: -1 }); // descending (-1 = desc)
db.users.find().sort({ country: 1, name: 1 }); // by country, then name (tie-break)
db.users.find().sort({ createdAt: -1 }); // newest first (common)
sort একটি ডকুমেন্ট নেয় যেখানে field:direction থাকে (1 আরোহী, -1 অবরোহী)। একাধিক ফিল্ড টাই-ব্রেকিং প্রদান করে।
db.users.find().sort({ name: 1 }).limit(10); // first 10 (page 1)
db.users.find().sort({ name: 1 }).skip(10).limit(10); // skip 10, take 10 (page 2)
// page N: .skip((N-1) * pageSize).limit(pageSize)
limit(n) সর্বাধিক n ডকুমেন্ট প্রদান করে; skip(m) প্রথম m টি এড়িয়ে যায়। একসাথে তারা অফসেট পেজিনেশন বাস্তবায়ন করে (পৃষ্ঠা N skip + limit এর মাধ্যমে)।
// ❌ pagination without sort → inconsistent order (pages may overlap/skip)
db.users.find().skip(10).limit(10);
// ✅ sort by a stable field for consistent pages
db.users.find().sort({ _id: 1 }).skip(10).limit(10);
sort ছাড়া, ডকুমেন্ট অর্ডার গ্যারান্টিযুক্ত নয়, তাই পেজিনেটেড পৃষ্ঠাগুলি অসামঞ্জস্যপূর্ণ হতে পারে। পেজিনেশনের সময় সর্বদা একটি স্থিতিশীল ফিল্ড (যেমন _id) দ্বারা সর্টিং করুন।
// ⚠️ skip(1000000) must scan/skip a million docs → slow on deep pages
// ✅ range-based (cursor) pagination — far more efficient for large datasets
db.users.find({ _id: { $gt: lastSeenId } }).sort({ _id: 1 }).limit(10);
// → use the last document's _id to fetch the next page (uses the index, no skipping)
Sorting on an INDEXED field is efficient. Sorting a large result set WITHOUT an index
requires an in-memory sort (limited size — can fail/be slow for big sorts).
→ Index fields you sort by.
সর্টিং এবং পেজিনেশন MongoDB-এ ডেটা কার্যকরভাবে প্রদর্শনের জন্য মৌলিক — ফলাফল ক্রম নির্ধারণ এবং পরিচালনাযোগ্য পৃষ্ঠা প্রদান করা কাছাকাছি সর্বজনীন প্রয়োজন (যেকোনো তালিকা, ফিড, বা অ্যাপ্লিকেশনে টেবিল), তাই সেগুলি বোঝা অপরিহার্য প্রতিদিনের জ্ঞান।
sort জানা (ফিল্ড দ্বারা 1/-1 সহ ক্রম নির্ধারণ, টাই-ব্রেকিং সহ) এবং limit/skip (অফসেট পেজিনেশনের জন্য — ডেটার পৃষ্ঠা প্রদান করা) সাধারণ প্রশ্ন ফলাফল উপস্থাপনার চাহিদা পূরণ করে।
দুটি ব্যবহারিক পয়েন্ট বিশেষভাবে গুরুত্বপূর্ণ: পেজিনেশন করার সময় সর্বদা সর্টিং করুন (এটি ছাড়া, ডকুমেন্ট অর্ডার গ্যারান্টিযুক্ত নয়, অসামঞ্জস্যপূর্ণ পৃষ্ঠা সৃষ্টি করে যা ওভারল্যাপ বা ডকুমেন্ট এড়িয়ে যায় — একটি বাস্তব বাগ, SQL-এর মতো একই সমস্যা), এবং বোঝা যে গভীর পৃষ্ঠাগুলিতে skip ধীর (এটি সমস্ত পূর্বের ডকুমেন্ট স্ক্যান এবং এড়িয়ে যেতে হবে) — তাই রেঞ্জ-ভিত্তিক (কার্সর) পেজিনেশন (শেষ দেখা _id ব্যবহার করে পরবর্তী পৃষ্ঠা আনতে, স্কিপ ছাড়াই ইন্ডেক্স লাভ করে) বড় ডেটাসেটের জন্য অনেক বেশি দক্ষ, একটি মূল্যবান পারফরম্যান্স কৌশল।
জানা যে ইন্ডেক্সড ফিল্ডগুলিতে সর্টিং দক্ষ যখন বড় অইন্ডেক্সড সর্টগুলি ধীর বা ব্যর্থ হতে পারে (ইন-মেমরি সর্ট সীমা) গুরুত্বপূর্ণ — আপনি যে ফিল্ডগুলি দ্বারা সর্টিং করেন সেগুলিকে ইন্ডেক্স করুন।
যেহেতু সর্টিং এবং পেজিনেশন প্রায় সমস্ত ডেটা প্রদর্শনের জন্য প্রয়োজনীয়, এবং যেহেতু সামঞ্জস্যতা প্রয়োজনীয়তা (স্থিতিশীল পেজিনেশনের জন্য সর্টিং) এবং পারফরম্যান্স বিবেচনা (skip বনাম রেঞ্জ-ভিত্তিক পেজিনেশন, ইন্ডেক্সড সর্ট) সরাসরি সঠিকতা এবং গতি প্রভাবিত করে, MongoDB সর্টিং এবং পেজিনেশন বোঝা — sort, skip/limit সহ অফসেট পেজিনেশন, স্থিতিশীল-সর্টের প্রয়োজনীয়তা, দক্ষ রেঞ্জ-ভিত্তিক বিকল্প, এবং সর্টের ফিল্ডগুলি ইন্ডেক্স করা — অপরিহার্য, ঘন ঘন প্রয়োগ করা জ্ঞান MongoDB ডেটা কার্যকরভাবে এবং পারফরম্যান্সের সাথে উপস্থাপনকারী অ্যাপ্লিকেশন তৈরির জন্য।
বিস্তারিত উত্তরসহ IT ইন্টারভিউ প্রশ্নের একটি লাইব্রেরি — জুনিয়র থেকে সিনিয়র পর্যন্ত।
দান করুন