Heim  >  Artikel  >  Web-Frontend  >  Kann die Nur-Vorwärts-Paginierung mit Reihenfolge die Paginierungsbeschränkungen von MongoDB beseitigen?

Kann die Nur-Vorwärts-Paginierung mit Reihenfolge die Paginierungsbeschränkungen von MongoDB beseitigen?

DDD
DDDOriginal
2024-10-24 06:31:02172Durchsuche

Can Forward-Only Pagination with Ordering Eliminate MongoDB's Pagination Limitations?

Paginierungstechniken in MongoDB: Jenseits der Einschränkungen von ski()

Es ist allgemein anerkannt, dass man sich für MongoDB auf die Methode „skip()“ verlässt Die Paginierung kann bei wachsender Datenmenge zu Leistungsproblemen führen. Um dieser Herausforderung zu begegnen, besteht ein alternativer Ansatz darin, die natürliche Reihenfolge des _id-Felds für die Paginierung zu nutzen.

Die ID des letzten Dokuments

Der Kern dieser Technik liegt darin Ermitteln der ID des letzten Dokuments aus der vorherigen Seite, die dann als Ausgangspunkt für die nächste Seite verwendet wird. Für Anfänger kann es jedoch eine Herausforderung sein, die letzte ID zu identifizieren.

Nur ​​Vorwärtspaginierung mit _id-Reihenfolge

Für Szenarien, in denen eine Rückwärtspaginierung oder das Springen zu bestimmten Seiten nicht möglich ist Bei Bedarf kann ein Konzept namens „Forward Paging“ eingesetzt werden. Bei dieser Technik wird durch einen Cursor iteriert und die _id des zuletzt gesehenen Dokuments für nachfolgende Abfragen gespeichert.

Beispiel mit _id-Reihenfolge:

cursor = db.junk.find().limit(3);

while (cursor.hasNext()) {
   doc = cursor.next();
   if (!cursor.hasNext())
     lastSeen = doc._id;
}

Komplexe Reihenfolge

Bei Verwendung eines anderen Bestellfeldes als _id entstehen zusätzliche Komplexitäten. Das Konzept bleibt dasselbe, es wird jedoch notwendig, zuvor angezeigte Dokumente mithilfe des $nin-Operators auszuschließen.

Beispiel mit Rangfolge:

seenIds = [];
cursor = db.junk.find({ "_id": { "$nin": seenIds }, "rank": "$lte": lastSeen }
).sort({ "rank": -1 }).limit(2);

while (cursor.hasNext()) {
   doc = cursor.next();
   seenIds.push(doc._id);
   if (!cursor.hasNext() || lastSeen == null)
     lastSeen = doc.rank;
}

Fazit:

Vorwärts-Paginierung ist eine praktikable Option für Szenarien, in denen keine Rückwärts-Paginierung erforderlich ist. Durch die Verwendung des $nin-Operators und die Verwaltung gesehener Dokument-IDs ermöglicht diese Technik eine effiziente Paginierung ohne die mit „skip()“ verbundenen Speicherverbrauchsprobleme.

Das obige ist der detaillierte Inhalt vonKann die Nur-Vorwärts-Paginierung mit Reihenfolge die Paginierungsbeschränkungen von MongoDB beseitigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn