MongoDB sortiert Abfrageergebnisse mit sort und paginiert mit limit und skip — verkettet auf einem find-Cursor. Zusammen verwalten sie die Reihenfolge und das Zurückgeben von Datenseiten, was für die Anzeige von Ergebnissen unerlässlich ist.
MongoDB sortiert Abfrageergebnisse mit sort und paginiert mit limit und skip — verkettet auf einem find-Cursor. Zusammen verwalten sie die Reihenfolge und das Zurückgeben von Datenseiten, was für die Anzeige von Ergebnissen unerlässlich ist.
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 nimmt ein Dokument von Feld:Richtung (1 aufsteigend, -1 absteigend). Mehrere Felder ermöglichen 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) gibt höchstens n Dokumente zurück; skip(m) überspringt die ersten m. Zusammen implementieren sie Offset-Pagination (Seite N über 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);
Ohne sort ist die Dokumentreihenfolge nicht garantiert, daher können paginierte Seiten inkonsistent sein. Sortieren Sie immer nach einem stabilen Feld (wie _id) bei der Pagination.
// ⚠️ 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.
Sortierung und Pagination sind grundlegend für die sinnvolle Anzeige von Daten in MongoDB — das Ordnen von Ergebnissen und das Zurückgeben verwaltbarer Seiten sind nahezu universelle Anforderungen (jede Liste, jeder Feed oder jede Tabelle in einer Anwendung), daher ist das Verständnis dafür essentiell.
Das Wissen um sort (Sortierung nach Feldern mit 1/-1, mit Tie-Breaking) und limit/skip (für Offset-Pagination — das Zurückgeben von Datenseiten) deckt die häufigsten Anforderungen für die Präsentation von Abfrageergebnissen ab.
Zwei praktische Punkte sind besonders wichtig: Immer sortieren bei Pagination (ohne sie ist die Dokumentreihenfolge nicht garantiert, was zu inkonsistenten Seiten mit Überlappungen oder fehlenden Dokumenten führt — ein echtes Fehler, dasselbe Problem wie in SQL), und das Verständnis, dass skip bei tiefen Seiten langsam ist (es muss alle vorherigen Dokumente scannen und überspringen) — daher ist Range-basierte (Cursor-)Pagination (Verwendung der zuletzt gesehenen _id zum Abrufen der nächsten Seite, Nutzung des Index ohne Überspringen) für große Datensätze weitaus effizienter, eine wertvolle Leistungstechnik.
Dass Sortierung nach indizierten Feldern effizient ist, während große unindizierte Sortierungen langsam sein oder fehlschlagen können (In-Memory-Sortierungslimits), ist ebenfalls wichtig — indizieren Sie Felder, nach denen Sie sortieren.
Da Sortierung und Pagination für praktisch jede Datenanzeige erforderlich sind und die Konsistenzanforderung (Sortierung für stabile Pagination) und Leistungsüberlegungen (skip vs. Range-basierte Pagination, indizierte Sortierungen) direkt Korrektheit und Geschwindigkeit beeinflussen, ist das Verständnis von MongoDB-Sortierung und -Pagination — sort, Offset-Pagination mit skip/limit, die Anforderung der stabilen Sortierung, die effiziente Range-basierte Alternative und das Indizieren von Sortierungsfeldern — essentielles, häufig angewendetes Wissen für die Erstellung von Anwendungen, die MongoDB-Daten effektiv und performant darstellen.