MongoDB query results کو sort سے ترتیب دیتا ہے اور limit اور skip سے paginate کرتا ہے — یہ ایک find cursor پر chain ہوتے ہیں۔ مل کر یہ ترتیب اور ڈیٹا کے صفحات (pages) واپس کرنے کو سنبھالتے ہیں، جو results دکھانے کے لیے ناگزیر ہے۔
MongoDB query results کو sort سے ترتیب دیتا ہے اور limit اور skip سے paginate کرتا ہے — یہ ایک find cursor پر chain ہوتے ہیں۔ مل کر یہ ترتیب اور ڈیٹا کے صفحات (pages) واپس کرنے کو سنبھالتے ہیں، جو results دکھانے کے لیے ناگزیر ہے۔
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 کا ایک document لیتا ہے (1 ascending، -1 descending)۔ متعدد fields tie-breaking فراہم کرتے ہیں۔
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 documents واپس کرتا ہے؛ skip(m) پہلے m کو چھوڑ دیتا ہے۔ مل کر یہ offset pagination نافذ کرتے ہیں (page 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 کے بغیر document کی ترتیب کی ضمانت نہیں ہوتی، اس لیے paginate شدہ pages غیر مستقل ہو سکتے ہیں۔ paginate کرتے وقت ہمیشہ کسی مستحکم field (جیسے _id) سے sort کریں۔
// ⚠️ 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.
Sorting اور pagination MongoDB میں ڈیٹا کو مفید طریقے سے دکھانے کے لیے بنیادی ہیں — results کو ترتیب دینا اور قابلِ انتظام صفحات واپس کرنا تقریباً عالمگیر ضروریات ہیں (کسی بھی application میں کوئی بھی list، feed، یا table)، اس لیے ان کو سمجھنا ناگزیر روزمرہ کا علم ہے۔
sort (fields کو 1/-1 سے ترتیب دینا، tie-breaking کے ساتھ) اور limit/skip (offset pagination کے لیے — ڈیٹا کے صفحات واپس کرنا) کو جاننا query results پیش کرنے کی عام ضروریات کا احاطہ کرتا ہے۔
دو عملی نکات خاص طور پر اہم ہیں: pagination کرتے وقت ہمیشہ sort کریں (اس کے بغیر document کی ترتیب کی ضمانت نہیں ہوتی، جس سے غیر مستقل pages بنتے ہیں جو overlap کرتے یا documents چھوڑ دیتے ہیں — ایک حقیقی bug، وہی مسئلہ جو SQL میں ہوتا ہے)، اور یہ سمجھنا کہ skip گہرے pages پر سست ہے (اسے تمام سابقہ documents کو scan کر کے چھوڑنا پڑتا ہے) — اس لیے range پر مبنی (cursor) pagination (آخری دیکھے گئے _id کو استعمال کر کے اگلا page لانا، بغیر skipping کے index سے فائدہ اٹھانا) بڑے datasets کے لیے کہیں زیادہ مؤثر ہے، ایک قیمتی performance تکنیک۔
یہ جاننا کہ indexed fields پر sorting مؤثر ہے جبکہ بڑے بغیر-index sorts سست ہو سکتے یا ناکام ہو سکتے ہیں (in-memory sort کی حدود) بھی اہم ہے — جن fields سے آپ sort کرتے ہیں ان پر index بنائیں۔
چونکہ sorting اور pagination تقریباً کسی بھی ڈیٹا کی نمائش کے لیے درکار ہیں، اور چونکہ consistency کی شرط (مستحکم pagination کے لیے sort) اور performance کے پہلو (skip بمقابلہ range پر مبنی pagination، indexed sorts) براہِ راست درستی اور رفتار پر اثر انداز ہوتے ہیں، اس لیے MongoDB sorting اور pagination کو سمجھنا — sort، skip/limit کے ساتھ offset pagination، مستحکم-sort کی شرط، مؤثر range پر مبنی متبادل، اور sort fields پر indexing — ناگزیر، بار بار استعمال ہونے والا علم ہے جو ایسی applications بنانے کے لیے ہے جو MongoDB ڈیٹا کو مؤثر اور تیز رفتاری سے پیش کریں۔