Paging Forward dans MongoDB : une alternative à la pagination avec saut et limite
La pagination est une technique courante utilisée pour récupérer des données en morceaux gérables. Bien que l'implémentation de la pagination avec les modificateurs .skip() et .limit() de MongoDB soit une approche courante, elle peut devenir inefficace lors de la gestion de grands ensembles de données en raison de la consommation de mémoire.
Une solution alternative, connue sous le nom de « pagination avant », surmonte ce problème en utilisant l'ordre naturel du champ _id. Cependant, obtenir le _id du dernier document pour les requêtes ultérieures peut s'avérer difficile.
La pagination avant avec ordre naturel par _id
La pagination avant vous permet essentiellement d'"avancer" dans les résultats, au lieu de passer à des pages spécifiques ou de revenir en arrière. Le concept de base consiste à trouver le _id du dernier document dans une page et à l'utiliser comme limite inférieure pour la page suivante.
Voici un exemple :
// Page 1 var cursor = db.users.find().limit(pageSize); var doc = cursor.next(); var last_id = doc._id; // Page 2 var cursor = db.users.find({'_id'> last_id}). limit(10);
Cette approche récupère efficacement l'ensemble suivant. de documents sans consommer de mémoire excessive.
Pagination avant avec des critères de tri personnalisés
Bien que l'ordre naturel _id simplifie la pagination avant, il devient plus complexe lors de l'utilisation de critères de tri personnalisés. Une approche consiste à suivre à la fois le classement du dernier document vu (ou un autre champ de tri) et la liste des _ids déjà récupérés.
Voici un exemple :
// Page 1 var seenIds = []; var lastSeenRank = null; var cursor = db.junk.find().sort({ "rank": -1 }).limit(2); // ... // Page 2 var cursor = db.junk.find( { "_id": { "$nin": seenIds }, "rank": "$lte": lastSeenRank } ).sort({ "rank": -1 }).limit(2);
Cela vous permet d'exclure déjà voir les documents et maintenir l'ordre de tri souhaité.
Conclusion
La pagination avant avec MongoDB fournit une solution efficace pour la pagination, en particulier lorsqu'il s'agit de grands ensembles de données. Il vous permet de récupérer des plages de données spécifiques sans compromettre les performances, mais il comporte certaines limitations, telles que l'impossibilité de revenir facilement en arrière ou d'accéder à des pages spécifiques. Comprendre ces concepts vous permet d'utiliser efficacement cette approche dans vos applications MongoDB.
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!