Effizientes Paging in MongoDB mit mgo: Eine Lösung mit Cursor.min()
Mongo bietet Paginierungsfunktionen mithilfe der Skip- und Limit-Methoden in der Abfrage Operationen. Allerdings können diese Methoden mit zunehmender Seitenzahl ineffizient werden. Um das Paging zu optimieren, hat MongoDB die Funktion „cursor.min()“ eingeführt, mit der Abfragen von einem bestimmten Indexeintrag aus gestartet werden können.
Leider unterstützt der mgo.v2-Treiber „cursor.min()“ nicht direkt. Dieser Artikel stellt eine Lösung vor, die die Methode Database.Run() und den Befehl find verwendet, um effizientes Paging mit Cursor.min() zu erreichen.
Manuelle Implementierung
Erstellen Sie den Fund Befehl:
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} }
Führen Sie den Befehl aus:
var res struct { // Response fields } if err := db.Run(cmd, &res); err != nil { // Handle error }
Deserialisieren Sie die Ergebnisse:
var users []*User if err := db.C("users").NewIter(nil, res.Cursor.FirstBatch, 0, nil).All(&users); err != nil { // Handle error }
Nächsten Cursor abrufen:
if len(users) > 0 { lastUser := users[len(users)-1] // Convert last user to cursor data }
Konvertieren Cursordaten zu String:
if cursorData != nil { cursor := base64.RawURLEncoding.EncodeToString(bson.Marshal(cursorData)) }
Verwendung des Minquery-Pakets
Minquery bietet eine vereinfachte Schnittstelle zur Verwendung von Cursor.min() mit 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 speichert die Cursordaten für das nachfolgende Blättern Anfragen.
Hinweis: Geben Sie bei Verwendung von minquery.All() die im Cursor (Indexeintrag) verwendeten Feldnamen an, um die Erstellung des richtigen Cursorwerts zu ermöglichen.
Das obige ist der detaillierte Inhalt vonWie implementiert man effizientes Paging im mgo.v2-Treiber von MongoDB mit „cursor.min()'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!