Maison  >  Article  >  interface Web  >  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
DDDoriginal
2024-10-24 06:31:02172parcourir

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;
}

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;
}

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!

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