MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Пагинация с диапазон на MongoDB

Добър въпрос!

"Колко са твърде много?" - това, разбира се, зависи от размера на вашите данни и изискванията за производителност. Аз лично се чувствам неудобно, когато пропускам повече от 500-1000 записа.

Действителният отговор зависи от вашите изисквания. Ето какво правят съвременните сайтове (или поне някои от тях).

Първо, навигационната лента изглежда така:

1 2 3 ... 457

Те получават окончателния номер на страницата от общия брой записи и размера на страницата. Нека преминем към страница 3. Това ще включва известно прескачане от първия запис. Когато пристигнат резултатите, знаете идентификатора на първия запис на страница 3.

1 2 3 4 5 ... 457

Нека пропуснем още малко и да отидем на страница 5.

1 ... 3 4 5 6 7 ... 457

Разбирате идеята. Във всяка точка виждате първата, последната и текущата страница, както и две страници напред и назад от текущата страница.

Запитвания

var current_id; // id of first record on current page.

// go to page current+N
db.collection.find({_id: {$gte: current_id}}).
              skip(N * page_size).
              limit(page_size).
              sort({_id: 1});

// go to page current-N
// note that due to the nature of skipping back,
// this query will get you records in reverse order 
// (last records on the page being first in the resultset)
// You should reverse them in the app.
db.collection.find({_id: {$lt: current_id}}).
              skip((N-1)*page_size).
              limit(page_size).
              sort({_id: -1});


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Съхраняване на приятелски отношения в MongoDB?

  2. Касандра срещу MongoDB

  3. Най-съвременно управление на база данни:ClusterControl - Ръководството

  4. MongoDB – ограничаване на резултатите от заявка

  5. MongoDB:Как да получите отделен списък със стойности на полета на поддокумента?