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!