Maison > interface Web > js tutoriel > Comment implémenter une pagination efficace dans MongoDB à l'aide de _id et Forward Paging ?

Comment implémenter une pagination efficace dans MongoDB à l'aide de _id et Forward Paging ?

Mary-Kate Olsen
Libérer: 2024-10-24 06:55:02
original
1095 Les gens l'ont consulté

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

Comment implémenter la pagination dans MongoDB

Bien que l'utilisation de skip soit généralement déconseillée pour la pagination en raison de sa consommation de mémoire à grande échelle, une approche alternative est pour exploiter le champ _id pour un ordre naturel.

Obtenir le _id du dernier document

Pour obtenir le _id du dernier document sur une page donnée, vous pouvez utiliser ce qui suit approche :

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

Paging avant

Plutôt que d'utiliser .skip() et .limit(), la pagination avant implique de parcourir le curseur et de stocker le dernier vu _identifiant. Lors des itérations suivantes, la requête est modifiée pour exclure les documents déjà vus, tout en limitant également les résultats à ceux dont le _id est inférieur ou égal à la dernière valeur vue.

Pour un ordre naturel par _id, le code ressemblerait à ceci :

<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>
Copier après la connexion

Requête modifiée pour les pages suivantes

La requête suivante est utilisée pour récupérer la page suivante :

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

Tri complexe

Pour trier par des champs autres que _id, tels que le classement, vous devez garder une trace des documents précédemment consultés et utiliser l'opérateur $nin pour les exclure.

Voici un exemple d'extrait de code pour la pagination avant avec tri par 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>
Copier après la connexion

La requête suivante pour la page suivante serait :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal