Команда ReQL: between
Синтаксис команды
table.between(lowerKey, upperKey) → selection
Описание
Получение всех документов между двумя ключами. Принимает три optArgs: 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).optArg("right_bound", "closed").run(conn);
Пример: Найти всех пользователей с первичным ключом < 20.
r.table("marvel").between(r.minval(), 20).run(conn);
Пример: Найти всех пользователей с первичным ключом > 10.
r.table("marvel").between(10, r.maxval()).optArg("left_bound", "open").run(conn);
Пример: Команда between может использоваться и с вторичными индексами. Просто передайте необязательный аргумент index, указав вторичный индекс для запроса.
r.table("dc").between("dark_knight", "man_of_steel").optArg("index", "code_name").run(conn);
Пример: Получить всех пользователей, чьё полное имя находится между “John Smith” и “Wade Welles.”
r.table("users").between(r.array("Smith", "John"), r.array("Welles", "Wade")).optArg("index", "full_name").run(conn);
Примечание: Команда between работает с вторичными индексами полей даты, но не будет работать с неиндексированными полями даты. Чтобы проверить, находится ли значение даты между двумя другими датами, используйте команду during, а не between.
Вторичные индексы могут быть использованы очень мощными способами с between и другими командами; прочитайте полную статью по вторичным индексам для примеров использования булевых операций, contains и других.
Примечание: RethinkDB использует байтовое упорядочение для between и не поддерживает сортировку Unicode; не-ASCII символы будут отсортированы по кодовым точкам UTF-8.
Примечание: Если вы используете between после orderBy, команда between должна использовать индекс, указанный в orderBy, и будет по умолчанию использовать этот индекс. Попытка указать другой индекс приведёт к ReqlRuntimeError.
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/java/between/