При поиске методов нумерации страниц в Интернете обычно можно найти два способа:
- Пагинация на основе смещения:
Collection.find(
{ where_this: "equals that" },
{ skip: 15, limit: 5 }
)
- На основе курсоранумерация страниц:
Collection.find(
{ where_this: "equals that", _id: { $gt: cursor }},
{ sort: { _id: 1 }}
)
Но есть ли способ сделать пагинацию на основе курсора без сортировки коллекции по этому курсору? Например, говоря Монго: «Хорошо, я хочу 5 следующих предметов после этого _id
, независимо от того, в каком порядке находятся _id, просто дайте мне 5 предметов после того, как вы увидите, что _id
». Что-то в этом роде:
Collection.find(
{ where_this: "equals that", _id: { $must_come_after: cursor }},
{ sort: { other_field: 1 }}
)
Не всегда возможно использовать поле, с которым вы сортируете, в качестве курсора. Прежде всего, потому что эти поля могут быть разных типов, и вы можете позволить пользователям вашего приложения сортировать, например, таблицы по своему усмотрению. При использовании строго типизированной структуры API, такой как GraphQL, это было бы неразберихой. Во-вторых, у вас может быть два или более одинаковых значения для этого поля, следующих друг за другом в отсортированной коллекции. Если ваши страницы разбиваются посередине, запрос следующей страницы приведет к дублированию или игнорированию элементов.
Есть ли способ сделать это? Как это обычно делается, чтобы разрешить настраиваемую сортировку полей без нумерации на основе смещенияСпасибо.