MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB-Range-Paginierung

Gute Frage!

"Wie viele sind zu viele?" - das hängt natürlich von Ihrer Datengröße und Ihren Leistungsanforderungen ab. Ich persönlich fühle mich unwohl, wenn ich mehr als 500-1000 Datensätze überspringe.

Die tatsächliche Antwort hängt von Ihren Anforderungen ab. Folgendes tun moderne Websites (oder zumindest einige von ihnen).

Zunächst sieht die Navigationsleiste so aus:

1 2 3 ... 457

Sie erhalten die endgültige Seitenzahl aus der Gesamtzahl der Datensätze und der Seitengröße. Lassen Sie uns zu Seite 3 springen. Das wird einige Sprünge vom ersten Datensatz beinhalten. Wenn die Ergebnisse eintreffen, kennen Sie die ID des ersten Datensatzes auf Seite 3.

1 2 3 4 5 ... 457

Lassen Sie uns noch etwas überspringen und zu Seite 5 gehen.

1 ... 3 4 5 6 7 ... 457

Du hast die Idee. An jedem Punkt sehen Sie die erste, letzte und aktuelle Seite sowie zwei Seiten vor und zurück von der aktuellen Seite.

Abfragen

var current_id; // id of first record on current page.

// go to page current+N
db.collection.find({_id: {$gte: current_id}}).
              skip(N * page_size).
              limit(page_size).
              sort({_id: 1});

// go to page current-N
// note that due to the nature of skipping back,
// this query will get you records in reverse order 
// (last records on the page being first in the resultset)
// You should reverse them in the app.
db.collection.find({_id: {$lt: current_id}}).
              skip((N-1)*page_size).
              limit(page_size).
              sort({_id: -1});