Команда ReQL: between
Синтаксис команды
table.between(lower_key, upper_key[, options]) → table_slice table_slice.between(lower_key, upper_key[, options]) → table_slice
Описание
Получить все документы между двумя ключами. Принимает три необязательных аргумента: index, left_bound, и right_bound. Если index установлено в имя вторичного индекса, between вернёт все документы, где значение этого индекса находится в указанном диапазоне (по умолчанию используется первичный ключ). left_bound или right_bound могут быть установлены в open или closed для указания включения или исключения конечной точки диапазона (по умолчанию left_bound закрыта, а right_bound открыта).
Вы также можете использовать специальные константы r.minval и r.maxval для границ, которые представляют «меньше любого ключа индекса» и «больше любого ключа индекса» соответственно. Например, если вы используете r.minval в качестве нижнего ключа, то between вернёт все документы, первичные ключи (или индексы) которых меньше указанного верхнего ключа.
Если вы используете массивы в качестве индексов (составные индексы), они будут отсортированы с использованием лексикографического порядка. Рассмотрим следующий пример диапазона:
[[1, "c"] ... [5, "e"]]
Этот диапазон включает все составные ключи:
- первый элемент которого равен 1, а второй элемент равен или больше «c»;
- первый элемент которых находится между 1 и 5, независимо от значения второго элемента;
- первый элемент которого равен 5, а второй элемент меньше или равен «e».
Пример: Найти всех пользователей с первичным ключом >= 10 и < 20 (обычный полуоткрытый интервал).
r.table('marvel').between(10, 20).run(conn)
Пример: Найти всех пользователей с первичным ключом >= 10 и <= 20 (интервал, закрытый с обеих сторон).
r.table('marvel').between(10, 20, :right_bound => 'closed').run(conn)
Пример: Найти всех пользователей с первичным ключом < 20.
r.table('marvel').between(r.minval, 20).run(conn)
Пример: Найти всех пользователей с первичным ключом > 10.
r.table('marvel').between(10, r.maxval, :left_bound => 'open').run(conn)
Пример: Команда between может использоваться и для вторичных индексов. Просто передайте необязательный аргумент с именем вторичного индекса для запроса.
r.table('dc').between('dark_knight', 'man_of_steel',
:index => 'code_name').run(conn)
Пример: Получить всех пользователей, чьи полные имена находятся между «John Smith» и «Wade Welles».
r.table("users").between(["Smith", "John"], ["Welles", "Wade"],
:index => "full_name").run(conn)
Пример: Получить 10 лучших команд по рейтингу в порядке.
r.table("teams").order_by(:index => "rank").between(1, 11).run(conn)
Примечание: Если команда between используется после order_by, обе команды должны использовать один и тот же индекс; between будет использовать индекс, который используется order_by, так что в данном примере "rank" автоматически используется between. Попытка указать другой индекс приведёт к ReqlRuntimeError.
Пример: Подписаться на изменение данных 10 лучших команд по рейтингу.
changes = r.table("teams").between(1, 11, :index => "rank").changes().run(conn)
Команда
betweenработает со вторичными индексами на полях типа «дата», но не работает с полями типа «дата» без индекса. Чтобы проверить, находится ли значение даты между двумя другими датами, используйте команду during, а неbetween.Вторичные индексы могут использоваться очень мощным способом с
betweenи другими командами; ознакомьтесь со всей статьёй о вторичных индексах для примеров использования булевых операций,containsи др.RethinkDB использует байтовое упорядочение для
betweenи не поддерживает сортировку по Unicode; символы, не являющиеся ASCII, будут отсортированы по коду UTF-8.
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/ruby/between/