Команда ReQL: between
Синтаксис команды
table.between(lowerKey, upperKey[, options]) → table_slice table_slice.between(lowerKey, upperKey[, options]) → table_slice
Описание
Получить все документы между двумя ключами. Принимает три необязательных аргумента: index, leftBound, и rightBound. Если index установлено в имя вторичного индекса, between вернёт все документы, где значение этого индекса находится в заданном диапазоне (по умолчанию используется первичный ключ). leftBound или rightBound могут быть установлены в open или closed для указания включения или невключения конечной точки диапазона (по умолчанию leftBound закрыта, а rightBound открыта).
Вы также можете использовать специальные константы 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, callback);
Пример: Найти всех пользователей с первичным ключом >= 10 и <= 20 (интервал, закрытый с обеих сторон).
r.table('marvel').between(10, 20, {rightBound: 'closed'}).run(conn, callback);
Пример: Найти всех пользователей с первичным ключом < 20.
r.table('marvel').between(r.minval, 20).run(conn, callback);
Пример: Найти всех пользователей с первичным ключом > 10.
r.table('marvel').between(10, r.maxval, {leftBound: 'open'}).run(conn, callback);
Пример: Команда between также может использоваться с вторичными индексами. Просто передайте необязательный аргумент индекса, указывая вторичный индекс для запроса.
r.table('dc').between('dark_knight', 'man_of_steel', {index: 'code_name'}).run(conn, callback);
Пример: Получить всех пользователей, полное имя которых находится между “John Smith” и “Wade Welles”.
r.table("users").between(["Smith", "John"], ["Welles", "Wade"],
{index: "full_name"}).run(conn, callback);
Пример: Получить 10 команд с наивысшим рейтингом в порядке сортировки.
r.table("teams").orderBy({index: "rank"}).between(1, 11).run(conn, callback);
Примечание: Когда between используется после orderBy, обе команды должны использовать один и тот же индекс; between будет использовать индекс, используемый orderBy, поэтому в данном примере "rank" автоматически используется between. Попытка указать другой индекс приведёт к ReqlRuntimeError.
Пример: Подписаться на поток изменений команд с рейтингом в топ-10.
r.table("teams").between(1, 11, {index: "rank"}).changes().run(conn, callback);
Команда
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/javascript/between/