Maison  >  Article  >  interface Web  >  Comment implémenter une pagination optimale dans MongoDB ?

Comment implémenter une pagination optimale dans MongoDB ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-24 06:54:02762parcourir

How to Implement Optimal Pagination in MongoDB?

(Implémentation de la pagination dans MongoDB)

La pagination basée sur les sauts n'est pas recommandée pour les grands ensembles de données en raison de sa consommation de mémoire. Une approche alternative pour la pagination consiste à utiliser l'ordre naturel par champ _id. Cependant, récupérer le _id du dernier document est un défi pour les débutants.

(Forward Paging)**

La pagination avant implique de parcourir les pages dans un ordre séquentiel, de stocker le _id du dernier élément de chaque page.

Pour un ordre naturel tel que _id, le processus est simple :

  1. Trouver la première page : db.users.find().limit( pageSize).
  2. Récupérer le _id du dernier document : last_id = ....
  3. Trouver la page suivante : users = db.users.find({'_id' > last_id} ). limit(10);.

(Ordre non naturel)**

Pour les ordres non naturels, comme le rang, le processus devient plus complexe :

  1. Sur la première page, stockez les _ids des documents récupérés et le classement lastSeen :

    • var sawIds = [];, var lastSeen = null;
    • Stockez _id et mettez à jour lastSeen tout en parcourant le curseur.
  2. Sur les pages suivantes, excluez les _ids vus et récupérez les documents dont le rang est inférieur ou égal à lastSeen :

    • db.junk.find( {_id : { $nin: sawIds }, rang : $lte : lastSeen } ).sort({ "rank": -1 }).limit(2 );

(Considérations)**

  • Maintenir une liste des _ids vus pour exclure les résultats sur les pages suivantes.
  • Stockez la valeur lastSeen et supprimez les _ids vus lorsque le classement change (pour les ordres non naturels).

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