«Предыдущая» ссылка - эквивалент LIMIT x OFFSET y? - PullRequest
3 голосов
/ 13 октября 2010

Я создаю систему страниц с использованием CouchDB, показывая:

  • 10 элементов на странице
  • ссылку на предыдущую страницу (если есть)
  • ссылка на следующую страницу (если есть)

Начиная с этой статьи по теме, я понимаю, что использование skip является неоптимальным, и что вместо этого я должен использовать *Свойство 1014 *, чтобы указать первый документ, прочитать 11 документов оттуда, отобразить первые 10 и использовать клавишу 11 th , чтобы отобразить ссылку на следующую страницу.Что меня беспокоит, так это ссылка на предыдущую страницу.В статье говорится:

Заполнить ссылку на предыдущую страницу так же просто, как перенести текущий стартовый ключ на следующую страницу.Если предыдущей стартовой клавиши нет, мы на первой странице.

Это работает при переходе на следующую страницу: при переходе со страницы 4 на страницу 5 я могу вспомнить, что на предыдущей странице было 4.Но когда я возвращаюсь со страницы 5 на страницу 4, я не могу перенести startkey страницы 3. Как это может работать?

Можно ли (и рекомендуется) использовать endkey вместе с skip=10 и limit=1, чтобы найти первый элемент на предыдущей странице, чтобы я мог создать ссылку на него?

Ответы [ 2 ]

6 голосов
/ 22 октября 2010

На самом деле вы можете запросить только 11 документов без skip, и это именно то, что делает Футон (посмотрите журналы CouchDB).

Трюк

Обе ссылки на следующую и предыдущую страницу будут похожи: startkey - это первый или последний элемент, с skip=1, чтобы избежать наложения. Затем вам нужно правильно использовать параметр descending для получения предыдущих или следующих документов.

Исполнение

Когда вы запрашиваете страницу, CouchDB отвечает одиннадцатью документами. Допустим, ключ первого - first, а ключ последнего - last. Ссылки на страницы будут выглядеть следующим образом:

"next": /db/_view/myview?descending=true&limit=11&startkey=last&skip=1
"back": /db/_view/myview?descending=false&limit=11&startkey=first&skip=1

Et voilà! Вам просто нужно перевернуть документы перед их отображением, когда descending равно false. ( «Поиск ваших данных с помощью представлений» из руководства CouchDB хорошо объясняет связь между этими параметрами и B-деревьями.)

Бонус

Вы можете легко получить docid первой или последней страницы (limit=1 и descending true или false) и получить систему нумерации страниц, очень похожую на ту, которую вы имели бы с классической базой данных (first, last , предыдущая, следующая).

0 голосов
/ 19 октября 2010

Прочитайте 21 документ вместо 11 - один дополнительный вперед и десять назад. Самый первый содержит ключ к предыдущей странице.

...