Lassen Sie uns sagen, ich habe 3 Datensätze mit diesen Noten:MongoDB - Probleme mit Paginieren Aufzeichnungen eine Partitur mit
{_id: 3, score: 0}, {_id: 20, score: 2.5}, {_id: 1, score: 0}
Gerade jetzt, ich abfragen, es auf diese Weise
Model.find({
score: {$lt: lastScore}
})
.sort({score: -1})
.limit(2)
lastScore ist das Ergebnis des letzten Datensatzes, der aus dieser Abfrage gefunden wurde. Auf diese Weise kann ich in der nächsten Iteration die folgende Seite von Datensätzen erhalten, ohne die vorherigen Datensätze einzubeziehen.
Aber es ist ein großes Problem, mal sehen, was mit dieser Abfrage passieren wird:
Zunächst einmal die 2 Datensätze sortiert nach Punktzahl werden getroffen: {_id: 20, score: 2.5}, {_id: 3, score: 0}
. Also, lastScore wird gleich 0 sein. Wenn Sie oben sehen, verwende ich score: {$lt: lastScore}
, so in der nächsten Iteration wird der neueste Datensatz nicht gefunden (0 ist nicht kleiner als lastScore, die auch 0 ist). Dieses Problem tritt bei allen Datensätzen auf, die den gleichen Score haben.
Haben Sie Vorschläge, wie Sie die Seitennummerierung mithilfe der Sortierung nach Punkten mit Mongoose implementieren?
PS: schnelle Lösung wäre es, die .skip() Methode zu verwenden, aber es mit großen Sammlungen nicht wirklich gut ist und ich brauche eine skalierbare Lösung
Ich denke, Ihre einzige Option ist '$ lte' (weniger als oder gleich), aber das kann immer noch nicht die Ergebnisse, die Sie suchen,' .skip() 'wird wahrscheinlich Ihre beste Lösung sein –
' $ lte' wird dir helfen. –
Leider ist $ lte keine brauchbare Lösung. Stellen Sie sich Hunderte von Datensätzen mit Score 0 vor, $ lte erhält nur die ersten 2 (es gibt '.limit (2)'), weil _lastScore_ immer 0 ist, und auch die vorherigen Datensätze enthalten werden –