Maison > interface Web > js tutoriel > La pagination avant uniquement avec commande peut-elle éliminer les limitations de pagination de MongoDB ?

La pagination avant uniquement avec commande peut-elle éliminer les limitations de pagination de MongoDB ?

DDD
Libérer: 2024-10-24 06:31:02
original
247 Les gens l'ont consulté

Can Forward-Only Pagination with Ordering Eliminate MongoDB's Pagination Limitations?

Techniques de pagination dans MongoDB : au-delà des limites de skip()

Il est largement reconnu que s'appuyer sur la méthode skip() pour MongoDB la pagination peut entraîner des problèmes de performances à mesure que les données augmentent. Pour relever ce défi, une approche alternative consiste à exploiter l'ordre naturel du champ _id pour la pagination.

L'ID du dernier document

Le nœud de cette technique réside dans déterminer l'identifiant du dernier document de la page précédente, qui est ensuite utilisé comme point de départ pour la page suivante. Cependant, pour les débutants, identifier le dernier identifiant peut être difficile.

Pagination avant uniquement avec commande _id

Pour les scénarios dans lesquels la pagination arrière ou le passage à des pages spécifiques ne sont pas Si nécessaire, un concept connu sous le nom de « pagination directe » peut être utilisé. Cette technique consiste à parcourir un curseur et à stocker le _id du dernier document vu pour les requêtes ultérieures.

Exemple avec la commande _id :

cursor = db.junk.find().limit(3);

while (cursor.hasNext()) {
   doc = cursor.next();
   if (!cursor.hasNext())
     lastSeen = doc._id;
}
Copier après la connexion

Commande complexe

Lors de l'utilisation d'un champ de commande différent de _id, des complexités supplémentaires surviennent. Le concept reste le même, mais il devient nécessaire d'exclure les documents précédemment vus à l'aide de l'opérateur $nin.

Exemple avec Rank Ordering :

seenIds = [];
cursor = db.junk.find({ "_id": { "$nin": seenIds }, "rank": "$lte": lastSeen }
).sort({ "rank": -1 }).limit(2);

while (cursor.hasNext()) {
   doc = cursor.next();
   seenIds.push(doc._id);
   if (!cursor.hasNext() || lastSeen == null)
     lastSeen = doc.rank;
}
Copier après la connexion

Conclusion :

La pagination vers l'avant est une option viable pour les scénarios dans lesquels la pagination vers l'arrière n'est pas requise. En utilisant l'opérateur $nin et en gérant les ID de documents vus, cette technique fournit une pagination efficace sans les problèmes de consommation de mémoire associés à skip().

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal