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!