MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Effiziente Paginierung der MongoDB-Aggregation?

In MongoDB-Cursor-Methoden (d. h. bei Verwendung von find() ) wie limit , sort , skip kann in beliebiger Reihenfolge aufgetragen werden => Reihenfolge spielt keine Rolle. Ein find() gibt einen Cursor zurück, auf den Änderungen angewendet wurden. Das Sortieren erfolgt immer vor dem Limit, das Überspringen erfolgt ebenfalls vor dem Limit. Mit anderen Worten lautet die Reihenfolge also:sortieren -> überspringen -> limitieren .

Das Aggregationsframework gibt keinen DB-Cursor zurück. Stattdessen gibt es ein Dokument zurück mit Aggregationsergebnissen. Es funktioniert, indem bei jedem Schritt der Pipeline Zwischenergebnisse erzeugt werden, und daher ist die Reihenfolge der Operationen wirklich wichtig.

Ich denke, MongoDB unterstützt keine Reihenfolge für Cursor-Modifizierermethoden, da sie intern implementiert ist.

Sie können ein Ergebnis des Aggregationsframeworks nicht paginieren, da es ein einzelnes Dokument nur mit Ergebnissen gibt. Sie können bei einer regulären Abfrage immer noch paginieren, indem Sie Skip und Limit verwenden, aber eine bessere Vorgehensweise wäre die Verwendung einer Bereichsabfrage, da sie einen Index effizient verwendet.

AKTUALISIERUNG:

Seit v2.6 gibt das Mongo-Aggregationsframework einen Cursor anstelle eines einzelnen Dokuments zurück. Vergleiche:v2.4 und v2.6 .