#sorting #pagination #couchdb
#сортировка #разбивка на страницы #couchdb
Вопрос:
Итак, я использую этот подход в документах CouchDB для выполнения разбивки на страницы.
- Запрос rows_per_page 1 строки из представления
- Отображать строки rows_per_page, хранить 1 строку как next_startkey и next_startkey_docid
- В качестве информации о странице сохраните startkey и next_startkey
- Используйте значения next_* для создания следующей ссылки, а остальные — для создания предыдущей ссылки
Одна вещь, которую я не понимаю, это то, как мне выполнить сортировку, используя этот подход, предполагая, что у каждого документа есть последняя обновленная временная метка, и я хочу сортировать с использованием этого поля вместо сортировки с использованием идентификаторов.
Ответ №1:
Прежде всего, сортировка всегда будет по КЛЮЧАМ. Запрос _all_docs приводит к запросу таблицы, где ключом является _id.
[
{
"key": "my_first_id",
"value": {}
},
{
"key": "my_second_id",
"value": {}
}
]
Поэтому, если вы хотите выполнить сортировку по другому полю, кроме _id, вам нужно будет использовать Отображение / уменьшение (просмотры) Например, вы можете создать представление, в котором ключом является поле updatedAt.
Это приведет к чему-то вроде этого :
[
{
"key": "1475858068",
"value": {}
},
{
"key": "1475553268",
"value": {}
}
]
Таким образом, использование сортировки приведет к сортировке ключа 🙂
Комментарии:
1. Извините, но я не думаю, что вы понимаете вопрос в целом. Да, ваше решение работает, но я хочу добиться сортировки разбивки на страницы. Метод разбивки на страницы, который я описал выше, требует уникального «ключа» для использования в качестве закладки для следующей страницы, и я просто не могу использовать только временную метку в качестве ключа.
2. Существует множество методов разбивки на страницы, как описано здесь . Все они могут быть использованы с моим решением. Когда у вас есть представление, у вас всегда есть минимум 3 свойства (идентификатор, ключ, значение). Используя представление, вы сможете правильно сортировать и при этом иметь возможность получить последний идентификатор для разбивки на страницы.