Paging efficace dans MongoDB avec mgo : une solution utilisant Cursor.min()
Mongo fournit une fonctionnalité de pagination à l'aide des méthodes Skip et Limit dans la requête opérations. Cependant, ces méthodes peuvent devenir inefficaces lorsque le nombre de pages augmente. Pour optimiser la pagination, MongoDB a introduit la fonctionnalité curseur.min(), qui permet aux requêtes de démarrer à partir d'une entrée d'index spécifique.
Malheureusement, le pilote mgo.v2 ne prend pas directement en charge curseur.min(). Cet article présente une solution utilisant la méthode Database.Run() et la commande find pour obtenir une pagination efficace à l'aide de curseur.min().
Implémentation manuelle
Créer la recherche Commande :
cmd := bson.D{ {Name: "find", Value: "users"}, // Your query conditions {Name: "sort", Value: bson.D{ {Name: "name", Value: 1}, {Name: "_id", Value: 1} }}, {Name: "limit", Value: 10}, {Name: "batchSize", Value: 10}, {Name: "singleBatch": true} }
Exécuter la commande :
var res struct { // Response fields } if err := db.Run(cmd, &res); err != nil { // Handle error }
Désérialiser le Résultats :
var users []*User if err := db.C("users").NewIter(nil, res.Cursor.FirstBatch, 0, nil).All(&users); err != nil { // Handle error }
Obtenir le curseur suivant :
if len(users) > 0 { lastUser := users[len(users)-1] // Convert last user to cursor data }
Convertir Données du curseur vers String :
if cursorData != nil { cursor := base64.RawURLEncoding.EncodeToString(bson.Marshal(cursorData)) }
Utilisation du package minquery
minquery fournit une interface simplifiée pour utiliser curseur.min() avec mgo .v2 :
q := minquery.New(session.DB(""), "users", bson.M{"country": "USA"}). Sort("name", "_id").Limit(10) if cursor := getLastCursor(); cursor != "" { q = q.Cursor(cursor) } var users []*User newCursor, err := q.All(&users, "country", "name", "_id")
newCursor stocke les données du curseur pour la pagination ultérieure requêtes.
Remarque : Lorsque vous utilisez minquery.All(), fournissez les noms de champs utilisés dans le curseur (entrée d'index) pour permettre la création de la valeur de curseur appropriée.
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!