Как сделать пагинацию с MongoDB?

Нужно сделать пагинацию, почитал про ужасную скорость skip(), limit(), на забугорных сайтах рекомендуют делать так, с каждой выборки брать id последнего документа и делать find() по начиная с него, а потом опять limit(), но дело в том, что мне надо для любого числа, найти свои 10 записей. Т.е. может просто прийти число 5000, и мне нужно сформировать 10 записей с 5000 страницы. skip(), limit() не вариант, а как тогда сделать?
  • Вопрос задан
  • 2969 просмотров
Решения вопроса 2
@lega
skip(), limit() работают быстро, вам нужно просто сделать правильный индекс.

брать id последнего документа и делать find()

Это может работать медленнее, зависит от запроса и индексов.
А вообще для пагинации этот способ хорош тем что выдаст как раз следующие N элементов, когда skip+limit вам выдадут "дубли" с предыдущей страницы если в базе появятся новые элементы (например на хабре если перелистывать страницу раз в час, то можно на 2-й странице увидеть посты которые вы просмотрели на 1-й странице)
Ответ написан
@Stopy Автор вопроса
Нашел решение: docs.mongodb.org/manual/tutorial/optimize-query-pe...
Примерный код:
posts.createIndex({ time: 1},{}, function(err, indexName){
   if (err) next(err);
      posts.find({}).sort({time: -1}).skip((page-1)*10).limit(10).toArray(function(err, data) {
         if (err) next(err);
         callback(data);
      });
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы