Paging efficace dans MongoDB avec mgo à l'aide de curseur.min()
Capacités de pagination de MongoDB, couramment implémentées à l'aide de Query.Skip() et Query .Limit(), peut devenir lent lorsque le numéro de page augmente. Pour résoudre ce problème, MongoDB a introduit curseur.min(), qui permet de spécifier la première entrée d'index à partir de laquelle commencer à lister les résultats.
Limitations de mgo.v2
Malheureusement, le pilote mgo.v2 ne prend pas en charge le curseur.min(). Cependant, cette fonctionnalité peut être obtenue à l'aide de la méthode Database.Run() pour exécuter des commandes MongoDB, y compris la commande find.
Implémentation manuelle d'une pagination efficace
Utilisation github.com/icza/minquery
Le package minquery fournit un wrapper qui simplifie le processus d'exécution d'une commande find avec la prise en charge de curseur.min().
q := minquery.New(session.DB(""), "users", bson.M{"country" : "USA"}). Sort("name", "_id").Limit(10) // If this is not the first page, set cursor: if cursor := getLastCursor(); cursor != "" { q = q.Cursor(cursor) } var users []*User newCursor, err := q.All(&users, "country", "name", "_id")
Remarque : Lorsque vous utilisez minquery.All(), spécifiez les noms des champs du curseur lors du décodage des résultats, même s'ils ne sont pas utilisés directement. Ceci est crucial pour générer les données du curseur pour les requêtes ultérieures.
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!