Как получить n документов после _id в отсортированной коллекции - PullRequest
2 голосов
/ 19 июня 2020

Я хочу использовать разбиение на страницы на основе курсора в коллекции mongodb с сортировкой.

Вот образец коллекции

{
  _id: 3,
  name: 'aaa'
},
{
  _id: 2,
  name: 'bbb'
},
{
  _id: 1,
  name: 'ccc'
}

Итак, в моем первом запросе я отсортирую коллекцию по name по возрастанию и ограничение на 1, первый документ будет

{
  _id: 3,
  name: 'aaa'
}

Вот где мне нужна помощь, теперь мне нужен запрос, который сортирует коллекцию по name и возвращает n документов после _id:3, но в отсортированной коллекции.

Мне нужно, чтобы он возвращал

{
  _id: 2,
  name: 'bbb'
}

По сути, ему нужно просмотреть отсортированный список, найти _id, который я предоставляю, и вернуть n документов после этого.

Я работаю в конвейере агрегации и знаю, что могу использовать $ group и создать единый документ с массивом всех вложенных документов, а затем использовать $ filter . но это кажется действительно неэлегантным, и я беспокоюсь о производительности.

Есть идеи?

1 Ответ

0 голосов
/ 19 июня 2020

Вместо limit используйте опцию batchsize с find , чтобы получить первый документ. В ответ на команду также будет включен идентификатор курсора.

Затем используйте этот идентификатор курсора с getMore и установите размер пакета равным количеству документов, которое вы хотите в этом пакете.

...