Pagination efficace dans MongoDB à l'aide de mgo avec gestion personnalisée du curseur
Problème :
Pendant que mgo .v2 fournit des méthodes de pagination intégrées (Query.Skip() et Query.Limit()), elles devenir inefficace pour les grandes listes de résultats en raison de la nécessité de parcourir tous les documents avant de sauter les x premiers documents (déterminés par Skip()).
Solution :
MongoDB fournit curseur.min() pour accéder au résultat souhaité, réduisant ainsi le nombre de documents traités. Cependant, mgo.v2 ne prend pas en charge nativement la spécification de curseur.min().
Database.Run() et Find Command :
Pour exploiter curseur.min() sans support natif, nous pouvons utiliser Database.Run() pour exécuter une commande find avec une requête personnalisée, où nous spécifions l'argument min pour désigner l'index de départ souhaité entrée.
Encodage des données du curseur :
Après avoir exécuté la requête, nous devons obtenir les données du curseur à partir du premier lot du résultat. Pour stocker et transmettre ces données efficacement, nous pouvons utiliser bson.Marshal() combiné avec l'encodage base64 pour générer une chaîne de curseur sécurisée pour le Web.
Gestion du curseur :
Pour gérer les curseurs entre les pages, nous pouvons les décoder et les ré-encoder en utilisant respectivement l'encodage base64 et bson. Cela garantit la possibilité de reprendre les requêtes là où nous les avons laissées.
Utilisation de github.com/icza/minquery :
Alternativement, nous pouvons utiliser le package minquery, qui fournit un wrapper pour configurer et exécuter les commandes de recherche MongoDB avec la spécification du curseur. Il simplifie le processus de gestion des curseurs entre les pages.
Extraits de code :
Gestion personnalisée des curseurs (approche manuelle) :
query := mgo.Query{ Limit: 10, } if min != nil { query = query.Skip(1).Min(min) }
Approche du package Minquery :
query := minquery.New(). Cursor(cursor). Limit(10)
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!