Spec-Zone.ru › RethinkDB python

Команда ReQL: order_by

Синтаксис команды

table.order_by([key | function], index=index_name) → table_slice
selection.order_by(key | function[, ...]) → selection<array>
sequence.order_by(key | function[, ...]) → array

Описание

Сортирует последовательность по значениям документов заданного ключа (ключей). Для указания порядка, оберните атрибут либо r.asc либо r.desc (по умолчанию — по возрастанию).

Примечание: RethinkDB использует байтовое сравнение для orderBy и не поддерживает сортировку по Юникоду; символы, не являющиеся ASCII, будут отсортированы по кодовым точкам UTF-8. Более подробную информацию о порядке сортировки в RethinkDB см. в разделе Типы данных ReQL.

Сортировка без индекса требует, чтобы сервер хранил последовательность в памяти, и ограничена 100 000 документами (или значением параметра arrayLimit для команды run). Сортировка с индексом может выполняться на произвольно больших таблицах или после команды between с использованием того же индекса. Это относится как к вторичным индексам, так и к первичному ключу (например, index='id').

Функции сортировки, переданные в order_by должны быть детерминированными. Например, нельзя сортировать строки с помощью команды random. Использование недетерминированной функции с order_by приведет к ошибке ReqlQueryLogicError.

Пример: Сортировка всех записей с использованием индекса date.

r.table('posts').order_by(index='date').run(conn)

Индекс должен быть либо первичным ключом, либо создан ранее с помощью index_create.

r.table('posts').index_create('date').run(conn)

Также можно выбрать убывающий порядок:

r.table('posts').order_by(index=r.desc('date')).run(conn, callback)

Пример: Сортировка последовательности без индекса.

r.table('posts').get(1)['comments'].order_by('date')

Также можно выбрать убывающий порядок:

r.table('posts').get(1)['comments'].order_by(r.desc('date'))

Если вы выполняете аналитику без предварительной подготовки и знаете, что ваша таблица не будет содержать более 100 000 элементов (или вы изменили значение параметра arrayLimit для команды run), вы можете выполнить order_by без индекса:

r.table('small_table').order_by('date')

Пример: Для эффективной сортировки по нескольким полям используйте составной индекс.

Сортировка по дате и названию.

r.table('posts').order_by(index='date_and_title').run(conn)

Индекс должен быть либо первичным ключом, либо создан ранее с помощью index_create.

r.table('posts').index_create('date_and_title', lambda post:
    [post["date"], post["title"]]).run(conn)

Примечание: Нельзя указать несколько порядков в составном индексе. Следите за прогрессом на заявке #2306.

Пример: Если у вас есть последовательность с количеством документов меньше, чем array_limit, вы можете отсортировать её по нескольким полям без индекса.

r.table('small_table').order_by('date', r.desc('title'))

Пример: Обратите внимание, что сортировка с использованием индекса имеет наивысший приоритет. Следующий запрос сортирует записи по дате, а если несколько записей опубликованы в один день, они будут отсортированы по названию.

r.table('post').order_by('title', index='date').run(conn)

Пример: Используйте синтаксис вложенных полей, чтобы сортировать по полям из вложенных документов. (Вы также можете создавать индексы по вложенным полям с помощью этого синтаксиса с index_create.)

r.table('user').order_by(lambda user: user['group']['id']).run(conn)

Пример: Можно эффективно сортировать данные по произвольным выражениям с использованием индексов.

r.table('posts').order_by(index='votes').run(conn)

Индекс должен быть создан ранее с помощью index_create.

r.table('posts').index_create('votes', lambda post:
    post["upvotes"]-post["downvotes"]
).run(conn)

Пример: Если у вас есть последовательность с количеством документов меньше, чем array_limit, вы можете отсортировать её с помощью произвольной функции напрямую.

r.table('small_table').order_by(lambda doc:
    doc['upvotes']-doc['downvotes']
);

Также можно выбрать убывающий порядок:

r.table('small_table').order_by(r.desc(lambda doc:
    doc['upvotes']-doc['downvotes']
));

Пример: Сортировка после команды between может быть выполнена, если используется тот же индекс.

r.table("posts").between(r.time(2013, 1, 1, '+00:00'), r.time(2013, 1, 1, '+00:00'), index='date')
    .order_by(index='date').run(conn);

Связанные команды

  • skip
  • limit
  • []

© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/python/order_by/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API