Heim >Web-Frontend >js-Tutorial >Wie implementiert man eine effiziente Paginierung in MongoDB mithilfe von _id und 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 && 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!