Heim  >  Artikel  >  Web-Frontend  >  Wie implementiert man eine effiziente Paginierung in MongoDB mithilfe von _id und Forward Paging?

Wie implementiert man eine effiziente Paginierung in MongoDB mithilfe von _id und Forward Paging?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-24 06:55:02981Durchsuche

How to Implement Efficient Pagination in MongoDB Using _id and Forward Paging?

So implementieren Sie die Paginierung in MongoDB

Während die Verwendung von Skip für die Paginierung aufgrund des großen Speicherverbrauchs im Allgemeinen nicht empfohlen wird, gibt es einen alternativen Ansatz um das _id-Feld für eine natürliche Reihenfolge zu nutzen.

Abrufen der _id des letzten Dokuments

Um die _id des letzten Dokuments auf einer bestimmten Seite abzurufen, können Sie Folgendes verwenden Ansatz:

<code class="javascript">db.users.find().limit(pageSize);
//Find the id of the last document in this page
last_id = ...;</code>

Forward Paging

Anstatt .skip() und .limit() zu verwenden, beinhaltet Forward Paging das Durchlaufen des Cursors und das Speichern des zuletzt gesehenen _Ausweis. Bei nachfolgenden Iterationen wird die Abfrage geändert, um bereits gesehene Dokumente auszuschließen und gleichzeitig die Ergebnisse auf diejenigen zu beschränken, deren _id kleiner oder gleich dem zuletzt gesehenen Wert ist.

Für eine natürliche Reihenfolge nach _id würde der Code so aussehen Dies:

<code class="javascript">var lastSeen = null;
var cursor = db.junk.find().limit(3);

while (cursor.hasNext()) {
   var doc = cursor.next();
   if (!cursor.hasNext())
     lastSeen = doc._id;
}</code>

Geänderte Abfrage für nachfolgende Seiten

Die folgende Abfrage wird verwendet, um die nächste Seite abzurufen:

<code class="javascript">var cursor = db.junk.find({ "_id": { "$gt": lastSeen } }).limit(3);</code>

Komplexe Sortierung

Für die Sortierung nach anderen Feldern als _id, wie z. B. Rang, müssen Sie zuvor gesehene Dokumente im Auge behalten und den $nin-Operator verwenden, um sie auszuschließen.

Hier ein Beispiel-Codeausschnitt für Vorwärtsblättern mit Sortierung nach Rang:

<code class="javascript">var lastSeen = null;
var seenIds = [];
var cursor = db.junk.find().sort({ "rank": -1 }).limit(2);

while (cursor.hasNext()) {
   var doc = cursor.next();
   if ( lastSeen != null &amp;&amp; doc.rank != lastSeen )
       seenIds = [];
   seenIds.push(doc._id);
   if (!cursor.hasNext() || lastSeen == null)
     lastSeen = doc.rank;
}</code>

Die nachfolgende Abfrage für die nächste Seite wäre:

<code class="javascript">var cursor = db.junk.find(
    { "_id": { "$nin": seenIds }, "rank": "$lte": lastSeen }
).sort({ "rank": -1 }).limit(2);</code>

Das obige ist der detaillierte Inhalt vonWie implementiert man eine effiziente Paginierung in MongoDB mithilfe von _id und Forward Paging?. 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