Heim > Backend-Entwicklung > Golang > Wie implementiert man effizientes Paging in MongoDB mit mgo.v2 ohne native Cursor.min()-Unterstützung?

Wie implementiert man effizientes Paging in MongoDB mit mgo.v2 ohne native Cursor.min()-Unterstützung?

DDD
Freigeben: 2024-12-17 22:02:10
Original
728 Leute haben es durchsucht

How to Implement Efficient Paging in MongoDB with mgo.v2 without Native cursor.min() Support?

Effizientes Paging in MongoDB mit mgo unter Verwendung von Cursor.min()

Die Paging-Funktionen von MongoDB werden üblicherweise mit Query.Skip() und Query implementiert .Limit() kann langsam werden, wenn die Seitenzahl zunimmt. Um dieses Problem zu beheben, hat MongoDB Cursor.min() eingeführt, mit dem der erste Indexeintrag angegeben werden kann, ab dem mit der Auflistung der Ergebnisse begonnen werden soll.

Einschränkungen von mgo.v2

Leider Dem MGO.v2-Treiber fehlt die Unterstützung für Cursor.min(). Diese Funktionalität kann jedoch mithilfe der Database.Run()-Methode erreicht werden, um MongoDB-Befehle, einschließlich des Suchbefehls, auszuführen.

Effizientes Paging manuell implementieren

  1. Konstruieren Sie den Suchbefehl mit einem Filter, einer Sortierung, einem Grenzwert und optional dem Cursor.min()-Argument.
  2. Führen Sie den Befehl mit aus Database.Run() und dekodieren Sie die Ergebnisse.
  3. Transformieren Sie die Ergebnisse mit Collection.NewIter() in den gewünschten Typ.
  4. Generieren Sie die neuen Cursordaten aus dem letzten Dokument im Stapel.
  5. Verwenden Sie die Base64-Codierung, um die Cursordaten in eine websichere Zeichenfolge umzuwandeln.

Verwenden github.com/icza/minquery

Das Minquery-Paket stellt einen Wrapper bereit, der den Prozess der Ausführung eines Suchbefehls mit Cursor.min()-Unterstützung vereinfacht.

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")
Nach dem Login kopieren

Hinweis: Geben Sie bei Verwendung von minquery.All() beim Dekodieren der Ergebnisse die Namen der Cursorfelder an, auch wenn diese nicht direkt verwendet werden. Dies ist entscheidend für die Generierung der Cursordaten für nachfolgende Abfragen.

Das obige ist der detaillierte Inhalt vonWie implementiert man effizientes Paging in MongoDB mit mgo.v2 ohne native Cursor.min()-Unterstützung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage