MongoDB, sort ile sorgu sonuçlarını sıralar ve limit ile skip kullanarak sayfalandırır — bunlar bir find cursoru üzerinde zincirlenerek kullanılır. Birlikte, sonuçları sıralamak ve veri sayfalarını döndürmek için gereklidir.
MongoDB, sort ile sorgu sonuçlarını sıralar ve limit ile skip kullanarak sayfalandırır — bunlar bir find cursoru üzerinde zincirlenerek kullanılır. Birlikte, sonuçları sıralamak ve veri sayfalarını döndürmek için gereklidir.
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, alan:yön (1 artan, -1 azalan) içeren bir belge alır. Birden fazla alan, bağlı ilişkileri kırmak için kullanılır.
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) en fazla n belge döndürür; skip(m) ilk m belgeyi atlar. Birlikte offset sayfalandırması uygularlar (N. sayfa için skip + limit kullanılır).
// ❌ 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 olmadan, belge sırası garantili değildir, bu yüzden sayfalandırılmış sayfalar tutarsız olabilir. Sayfalandırırken her zaman sabit bir alan (örneğin _id) ile sırala.
// ⚠️ 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.
Sıralama ve sayfalandırma, MongoDB'de verileri yararlı bir şekilde görüntülemek için temeldir — sonuçları sıralamak ve yönetilebilir sayfalar döndürmek, neredeyse evrensel ihtiyaçlardır (bir uygulamadaki herhangi bir liste, akış veya tablo), bu nedenle bunları anlamak gereklidir.
sort bilgisine sahip olmak (alanları 1/-1 ile sıralamak, bağlı ilişkileri kırmak) ve limit/skip (sorgu sonuçlarının sayfalarını döndürmek için offset sayfalandırması — ) genel ihtiyaçları karşılar.
İki pratik nokta özellikle önemlidir: sayfalandırırken her zaman sırala (sıralama olmadan, belge sırası garantili değildir, bu da tutarsız sayfalara neden olur veya belgeleri atlar — gerçek bir hata, SQL'deki aynı sorundur), ve skip derin sayfalarda yavaştır (önceki tüm belgeleri taraması ve atlaması gerekir) — bu yüzden aralık tabanlı (cursor) sayfalandırması (son görülen _id'yi kullanarak sonraki sayfayı almak, dizini atlama olmadan kullanmak) büyük veri kümeleri için çok daha verimlidir, değerli bir performans tekniğidir.
Dizinlenmiş alanlar üzerinde sıralamak verimlidir, büyük dizinlendirilmemiş sıralamalar ise yavaş olabilir veya başarısız olabilir (bellek içi sıralama sınırları) — sıraladığınız alanları dizinleyin.
Sıralama ve sayfalandırma, hemen hemen her veri gösterimi için gerekli olduğundan ve tutarlılık gereksinimi (sabit sayfalandırma için sıralama) ile performans değerlendirmeleri (skip vs aralık tabanlı sayfalandırma, dizinlenmiş sıralamalar) doğruluğu ve hızı doğrudan etkilediğinden, MongoDB sıralama ve sayfalandırmasını anlamak — sort, skip/limit ile offset sayfalandırması, sabit sıralama gereksinimi, verimli aralık tabanlı alternatif ve sıralama alanlarını dizinleme — MongoDB verilerini etkili ve performant bir şekilde sunan uygulamalar oluşturmak için gerekli, sıkça uygulanan bilgidir.