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
1067 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!

source:php
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