Spec-Zone.ru › RethinkDB java

Справочник команд Java ReQL

Ищете документацию для драйвера сообщества?
Найдите страницу проекта для вашего драйвера для получения конкретной документации ReQL.

Доступ к ReQL

r

r → RethinkDB

Пространство имён ReQL верхнего уровня.

Пример: Настройка пространства имён верхнего уровня.

import com.rethinkdb.RethinkDB;
import com.rethinkdb.gen.exc.ReqlError;
import com.rethinkdb.gen.exc.ReqlQueryLogicError;
import com.rethinkdb.model.MapObject;
import com.rethinkdb.net.Connection;

public static final RethinkDB r = RethinkDB.r;

Подробнее об этой команде →

connection

r.connection() → Connection.Builder

Создать новое подключение к серверу базы данных. connection возвращает конструктор подключения с методами:

  • hostname(String): хост для подключения (по умолчанию localhost).
  • port(Integer): порт для подключения (по умолчанию 28015).
  • db(String): база данных по умолчанию (по умолчанию test).
  • user(String, String): учетная запись пользователя и пароль для подключения (по умолчанию "admin", "").
  • authKey(String): ключ аутентификации для подключения (по умолчанию null).
  • sslContext(SSLContext): экземпляр класса SSLContext для использования при SSL-подключениях.
  • certFile(InputStream): поток ввода, который будет прочитан и преобразован в SSLContext.
  • timeout(Long): временной интервал ожидания подключения в миллисекундах (по умолчанию null).
  • socketFactory(ConnectionSocket.Factory): фабрика для переопределения сокета подключения по умолчанию (по умолчанию null, которая использует фабрику по умолчанию).
  • pumpFactory(ResponsePump.Factory): фабрика для переопределения насоса ответов по умолчанию (по умолчанию null, которая использует фабрику по умолчанию).
  • unwrapLists(boolean): Если включено, будет раскручивать атомные ответы, которые являются списками для удобства (по умолчанию false).
  • defaultFetchMode(Result.FetchMode): Переопределяет режим извлечения подключения по отношению к частичным последовательностям (по умолчанию Result.FetchMode.LAZY).

Для создания SSL-подключения к серверу RethinkDB необходимо указать либо certFile, либо sslContext. Использовать следует только один из них.

Если подключение не может быть установлено, будет брошено исключение ReqlDriverError.

Пример: Установить подключение с использованием хоста и порта по умолчанию, указав базу данных по умолчанию.

Connection conn = r.connection().connect();

Подробнее об этой команде →

close

conn.close([boolean])

Закрыть открытое подключение.

Пример: Закрыть открытое подключение, ожидая завершения операций без ответа.

conn.close();

Подробнее об этой команде →

reconnect

conn.reconnect([boolean])

Закрыть и переподключиться. Если параметр true, дождаться завершения операций без ответа перед закрытием (по умолчанию false).

Пример: Отменить незавершенные запросы/запросы, которые больше не нужны.

conn.reconnect();

Подробнее об этой команде →

use

conn.use(dbName)

Изменить базу данных по умолчанию для этого подключения.

Пример: Изменить базу данных по умолчанию, чтобы не нужно было указывать базу данных при ссылке на таблицу.

conn.use("marvel");
r.table("heroes").run(conn);  // refers to r.db("marvel").table("heroes")

Подробнее об этой команде →

run

query.run(conn[, optArgs, fetchMode, typeRef]) → Result
query.runAsync(conn[, optArgs, fetchMode, typeRef]) → CompletableFuture<Result>

Выполнить запрос на подключении, возвращая объект результата.

Пример: Если вы согласны с потенциально устаревшими данными из всех таблиц, вовлеченных в этот запрос, и хотите потенциально более быстрые чтения, передайте флаг, разрешающий устаревшие данные в объекте параметров. Настройки для отдельных таблиц будут переопределять эту глобальную настройку для всех таблиц в запросе.

import com.rethinkdb.model.OptArgs;

r.table("marvel").run(conn, OptArgs.of("read_mode", "outdated"));

Подробнее об этой команде →

runNoReply

query.runNoReply(conn[, optArgs])

Выполнить запрос на подключении и немедленно вернуть результат, не дожидаясь возврата данных результата сервером.

Пример: Отправить запись и немедленно вернуть результат.

r.table("marvel").insert(document).runNoReply(conn);

Подробнее об этой команде →

changes

stream.changes() → stream
singleSelection.changes() → stream

Преобразовать запрос в поток изменений (changefeed), бесконечный поток объектов, представляющих изменения в результатах запроса по мере их возникновения. Поток изменений может возвращать изменения в таблице или в отдельном документе («точковый» поток изменений). Команды, такие как filter или map, могут использоваться перед командой changes для преобразования или фильтрации вывода, и многие команды, работающие с последовательностями, могут быть объединены после команды changes.

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

Начать отслеживание потока изменений в одном клиенте:

Result<Object> changes = r.table("games").changes().run(conn);
for (Object change : changes) {
    System.out.println(change);
}

По мере выполнения этих запросов во втором клиенте, первый клиент будет получать и выводить следующие объекты:

r.table("games").insert(r.hashMap("id", 1)).run(conn);
{"old_val": null, "new_val": {"id": 1}}
r.table("games").get(1).update(r.hashMap("player1", "Bob")).run(conn);
{"old_val": {"id": 1}, "new_val": {"id": 1, "player1": "Bob"}}
r.table("games").get(1).replace(
    r.hashMap("id", 1).with("player1", "Bob").with("player2", "Alice")
).run(conn);
{"old_val": {"id": 1, "player1": "Bob"},
 "new_val": {"id": 1, "player1": "Bob", "player2": "Alice"}}
r.table("games").get(1).delete().run(conn);
{"old_val": {"id": 1, "player1": "Bob", "player2": "Alice"}, "new_val": null}
r.tableDrop("games").run(conn);
ReqlRuntimeError: Changefeed aborted (table unavailable)

Подробнее об этой команде →

noreplyWait

conn.noreplyWait()
conn.noreplyWaitAsync() → CompletableFuture

Убедитесь, что предыдущие запросы, выполненные с помощью runNoReply, были обработаны сервером. Обратите внимание, что эта гарантия применяется только к запросам, выполняемым на том же подключении.

Пример: Мы ранее выполняли запросы с помощью runNoReply. Теперь подождите, пока сервер их обработает.

conn.noreplyWait();

Подробнее об этой команде →

server

conn.server()

Возвращает информацию о сервере, используемом подключением.

Пример: Возвращение информации о сервере.

conn.server();
{
    "id": "404bef53-4b2c-433f-9184-bc3f7bda4a15",
    "name": "amadeus",
    "proxy": false
}

Подробнее об этой команде →

optArg

term.optArg(option, value)

Указать необязательный аргумент для термина Java ReQL.

Пример: Передать необязательный аргумент right_bound к between.

r.table("marvel").between(10, 20).optArg("right_bound", "closed").run(conn);

Чтобы передать более одного необязательного аргумента, используйте optArg для каждого аргумента.

Подробнее об этой команде →

Результаты

next

result.next([timeout, unit])

Получить следующий элемент результата.

Пример: Получение следующего элемента.

try (Result<Object> result = r.table("superheroes").run(conn)) {
    Object doc = result.next();
}

Подробнее об этой команде →

forEach

result.forEach(doc -> { ... })

Лениво перебрать набор результатов по одному элементу за раз.

Пример: Обработка всех элементов!

try (Result<Object> result = r.table("users").run(conn)) {
    result.forEach(doc -> { System.out.println(doc); });
}

Подробнее об этой команде →

toList

result.toList()

Получить все результаты из результата в виде списка.

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

try (Result<Object> result = r.table("users").run(conn)) {
    processResults(result.toList());
}

Подробнее об этой команде →

close

result.close()

Закрыть результат. Закрытие результата отменяет соответствующий запрос и освобождает память, связанную с открытым запросом.

Пример: Закрытие результата.

result.close();

Подробнее об этой команде →

END_OF_DOCUMENT_MARKER

Работа с базами данных

dbCreate

r.dbCreate(dbName) → object

Создаёт базу данных. База данных RethinkDB — это набор таблиц, аналогично реляционным базам данных.

Пример: Создание базы данных с именем «superheroes».

r.dbCreate("superheroes").run(conn);

Возвращаемое значение:

{
    "config_changes": [
        {
            "new_val": {
                "id": "e4689cfc-e903-4532-a0e6-2d6797a43f07",
                "name": "superheroes"
            },
            "old_val": null
        }
    ],
    "dbs_created": 1
}

Подробнее об этой команде →

dbDrop

r.dbDrop(dbName) → object

Удаляет базу данных. База данных, все её таблицы и соответствующие данные будут удалены.

Пример: Удаление базы данных с именем «superheroes».

r.dbDrop("superheroes").run(conn);

Возвращаемое значение:

{
    "config_changes": [
        {
            "old_val": {
                "id": "e4689cfc-e903-4532-a0e6-2d6797a43f07",
                "name": "superheroes"
            },
            "new_val": null
        }
    ],
    "tables_dropped": 3,
    "dbs_dropped": 1
}

Подробнее об этой команде →

dbList

r.dbList() → array

Выводит список всех имён баз данных в кластере. Результатом является список строк.

Пример: Вывод списка всех баз данных.

r.dbList().run(conn);

Подробнее об этой команде →

Работа с таблицами

tableCreate

db.tableCreate(tableName) → object
r.tableCreate(tableName) → object

Создаёт таблицу. Таблица RethinkDB — это набор JSON-документов.

Пример: Создание таблицы с именем «dc_universe» с настройками по умолчанию.

r.db("heroes").tableCreate("dc_universe").run(conn);

Результат:

{
    "config_changes": [
        {
            "new_val": {
                "db": "test",
                "durability":  "hard",
                "id": "20ea60d4-3b76-4817-8828-98a236df0297",
                "name": "dc_universe",
                "primary_key": "id",
                "shards": [
                    {
                        "primary_replica": "rethinkdb_srv1",
                        "replicas": [
                            "rethinkdb_srv1",
                            "rethinkdb_srv2"
                        ]
                    }
                ],
                "write_acks": "majority"
            },
            "old_val": null
        }
    ],
    "tables_created": 1
}

Подробнее об этой команде →

tableDrop

db.tableDrop(tableName) → object

Удаляет таблицу из базы данных. Таблица и все её данные будут удалены.

Пример: Удаление таблицы с именем «dc_universe».

r.db("test").tableDrop("dc_universe").run(conn);

Результат:

{
    "config_changes": [
        {
            "old_val": {
                "db": "test",
                "durability":  "hard",
                "id": "20ea60d4-3b76-4817-8828-98a236df0297",
                "name": "dc_universe",
                "primary_key": "id",
                "shards": [
                    {
                        "primary_replica": "rethinkdb_srv1",
                        "replicas": [
                            "rethinkdb_srv1",
                            "rethinkdb_srv2"
                        ]
                    }
                ],
                "write_acks": "majority"
            },
            "new_val": null
        }
    ],
    "tables_dropped": 1
}

Подробнее об этой команде →

tableList

db.tableList() → array

Выводит список всех имён таблиц в базе данных. Результатом является список строк.

Пример: Вывод списка всех таблиц базы данных «test».

r.db("test").tableList().run(conn);

Подробнее об этой команде →

indexCreate

table.indexCreate(indexName[, indexFunction]) → object

Создаёт новый вторичный индекс в таблице. Вторичные индексы улучшают скорость многих запросов на чтение, незначительно увеличивая занимаемое пространство и уменьшая производительность записи. Для получения дополнительной информации о вторичных индексах, ознакомьтесь со статьёй «Использование вторичных индексов в RethinkDB».

Пример: Создание простого индекса, основанного на поле postId.

r.table("comments").indexCreate("postId").run(conn);

Подробнее об этой команде →

indexDrop

table.indexDrop(indexName) → object

Удаляет ранее созданный вторичный индекс этой таблицы.

Пример: Удаление вторичного индекса с именем «code_name».

r.table("dc").indexDrop("code_name").run(conn);

Подробнее об этой команде →

indexList

table.indexList() → array

Выводит список всех вторичных индексов этой таблицы.

Пример: Вывод списка доступных вторичных индексов для этой таблицы.

r.table('marvel').indexList().run(conn);

Подробнее об этой команде →

indexRename

table.indexRename(oldIndexName, newIndexName) → object

Переименовывает существующий вторичный индекс в таблице. Если optArg overwrite указан как true, ранее существовавший индекс с новым именем будет удалён, и индекс будет переименован. Если overwrite равен false (по умолчанию), будет выброшено исключение, если новый индекс с таким именем уже существует.

Пример: Переименование индекса в таблице комментариев.

r.table("comments").indexRename("postId", "messageId").run(conn);

Подробнее об этой команде →

indexStatus

table.indexStatus([, index...]) → array

Получает состояние указанных индексов в этой таблице или состояние всех индексов в этой таблице, если индексы не указаны.

Пример: Получение состояния всех индексов в test:

r.table("test").indexStatus().run(conn);

Подробнее об этой команде →

indexWait

table.indexWait([, index...]) → array

Ожидание готовности указанных индексов в этой таблице или всех индексов в этой таблице, если индексы не указаны.

Пример: Ожидание готовности всех индексов в таблице test:

r.table("test").indexWait().run(conn);

Подробнее об этой команде →

setWriteHook

table.setWriteHook(function | binary | null) → object

Устанавливает обработчик записи в таблице или перезаписывает его, если он уже существует.

Обработчик может быть анонимной функцией с сигнатурой function или двоичным представлением, полученным из поля function getWriteHook. Функция должна быть детерминированной и не может использовать подзапрос или команду r.js.

Подробнее об этой команде →

getWriteHook

table.getWriteHook() → null/object

Получает обработчик записи для этой таблицы. Если обработчик записи существует, результатом является объект следующего формата:

{
  "function": <binary>,
  "query": "setWriteHook(function(_var1, _var2, _var3) { return ...; })",
}

Подробнее об этой команде →

Запись данных

insert

table.insert(object | [object1, object2, ...]) → object

Вы можете передать следующие параметры с помощью optArg:

Пример: Вставка документа в таблицу posts.

r.table("posts").insert(
    r.hashMap("id", 1)
     .with("title", "Lorem ipsum")
     .with("content", "Dolor sit amet")
).run(conn);

Подробнее об этой команде →

update

table.update(object | function) → object
selection.update(object | function) → object
singleSelection.update(object | function) → object

Обновление JSON-документов в таблице. Принимает JSON-документ, выражение ReQL или их комбинацию.

Пример: Обновление статуса записи с id 1 на published.

r.table("posts").get(1).update(r.hashMap("status", "published")).run(conn);

Подробнее об этой команде →

replace

table.replace(object | function) → object
selection.replace(object | function) → object
singleSelection.replace(object | function) → object

Замена документов в таблице. Принимает JSON-документ или выражение ReQL и заменяет исходный документ новым. Новый документ должен иметь тот же первичный ключ, что и исходный документ.

Пример: Замена документа с первичным ключом 1.

r.table("posts").get(1).replace(
    r.hashMap("id", 1).with("title", "Lorem ipsum")
     .with("content", "Aleas jacta est")
     .with("status", "draft")
).run(conn);

Подробнее об этой команде →

delete

table.delete() → object
selection.delete() → object
singleSelection.delete() → object

Удаление одного или нескольких документов из таблицы.

Пример: Удаление одного документа из таблицы comments.

r.table("comments").get("7eab9e63-73f1-4f33-8ce4-95cbea626f59").delete().run(conn);

Подробнее об этой команде →

sync

table.sync() → object

Обеспечение записи данных в постоянное хранилище для заданной таблицы. Запросы, которые используют мягкую надёжность, не ждут завершения записи на диск; вызов sync для таблицы не вернётся, пока все предыдущие записи в таблицу не будут завершены, гарантируя сохранение данных.

Пример: После обновления нескольких героев с мягкой надёжностью, мы хотим дождаться, пока эти изменения будут сохранены.

r.table("marvel").sync().run(conn);

Подробнее об этой команде →

END_OF_DOCUMENT_MARKER

Выбор данных

db

r.db(dbName) → db

Ссылка на базу данных.

Пример: Явно укажите базу данных для запроса.

r.db("heroes").table("marvel").run(conn);

Подробнее об этой команде →

table

db.table(name) → table

Возвращает все документы в таблице. После table могут быть добавлены другие команды для возврата подмножества документов (например, get и filter) или для дальнейшей обработки.

Пример: Возвращает все документы в таблице ‘marvel’ из базы данных по умолчанию.

r.table("marvel").run(conn);

Подробнее об этой команде →

get

table.get(key) → singleRowSelection

Получить документ по первичному ключу.

Пример: Найти документ по UUID.

r.table("posts").get("a9849eef-7176-4411-935b-79a6e3c56a74").run(conn);

Подробнее об этой команде →

getAll

table.getAll([key, key2...]) → selection

Получить все документы, где заданное значение соответствует значению запрошенного индекса.

Пример: Ключи вторичных индексов не гарантируют уникальность, поэтому нельзя выполнить запрос с помощью get при использовании вторичного индекса.

r.table("marvel").getAll("man_of_steel").optArg("index", "code_name").run(conn);

Подробнее об этой команде →

between

table.between(lowerKey, upperKey) → selection

Получить все документы между двумя ключами. Принимает три optArgs: index, left_bound и right_bound. Если index задано как имя вторичного индекса, between вернёт все документы, где значение этого индекса находится в указанном диапазоне (по умолчанию используется первичный ключ). left_bound или right_bound могут быть установлены в open или closed, чтобы указать, нужно ли включать конец диапазона (по умолчанию left_bound закрыт, а right_bound открыт).

Пример: Найти всех пользователей с первичным ключом ≥ 10 и < 20 (обычный полуоткрытый интервал).

r.table("marvel").between(10, 20).run(conn);

Подробнее об этой команде →

filter

selection.filter(predicate_function) → selection
stream.filter(predicate_function) → stream
array.filter(predicate_function) → array

Возвращает все элементы в последовательности, для которых заданный предикат является истинным. Результат filter будет таким же, как и входные данные (последовательность, поток или массив). Документы могут быть отфильтрованы различными способами — диапазоны, вложенные значения, логические условия и результаты анонимных функций.

Пример: Получить всех пользователей, которым 30 лет.

r.table("users").filter(r.hashMap(age, 30)).run(conn);

Предикат r.hashMap(age, 30) выбирает документы в таблице users, у которых поле age имеет значение 30. Документы с полем age с другим значением или без поля age пропускаются.

Подробнее об этой команде →

Объединения

innerJoin

sequence.innerJoin(otherSequence, predicate_function) → stream
array.innerJoin(otherSequence, predicate_function) → array

Возвращает внутреннее объединение двух последовательностей.

Пример: Возвращает список всех противостояний между героями Marvel и DC, в которых герой DC мог бы победить героя Marvel в бою.

r.table("marvel").innerJoin(r.table("dc"),
    (marvel_row, dc_row) -> marvel_row.g("strength").lt(dc_row.g("strength"))
).zip().run(conn);

Подробнее об этой команде →

outerJoin

sequence.outerJoin(otherSequence, predicate_function) → stream
array.outerJoin(otherSequence, predicate_function) → array

Возвращает левое внешнее объединение двух последовательностей. Возвращаемая последовательность представляет собой объединение левой и правой последовательностей: все документы в левой последовательности будут возвращены, каждый сопоставлен с документом в правой последовательности, если он удовлетворяет условию предиката. В большинстве случаев вам нужно будет выполнить объединение с zip, чтобы объединить левые и правые результаты.

Пример: Возвращает список всех героев Marvel, сопоставленных с любыми героями DC, которые могли бы победить их в бою.

r.table("marvel").outerJoin(r.table("dc"),
    (marvel_row, dc_row) -> marvel_row.g("strength").lt(dc_row.g("strength"))
).zip().run(conn);

(Сравните это с innerJoin с теми же входными данными и предикатом, который вернёт список только тех противостояний, в которых герой DC имеет более высокую силу.)

Подробнее об этой команде →

eqJoin

sequence.eqJoin(leftField, rightTable) → sequence
sequence.eqJoin(function, rightTable) → sequence

Объединяет таблицы, используя поле или функцию в левой последовательности, сопоставляя первичные ключи или вторичные индексы в правой таблице. eqJoin более эффективен, чем другие типы объединения ReQL, и работает значительно быстрее. Документы в наборе результатов представляют собой пары документов левой и правой части, сопоставленные, когда поле в левой части существует и не является null, и в указанном индексе правой части есть запись со значением этого поля.

Пример: Сопоставьте игроков с играми, в которых они играли друг против друга.

Объедините эти таблицы, используя gameId в таблице игроков и id в таблице игр:

r.table("players").eqJoin("gameId", r.table("games")).run(conn);

Это вернёт набор результатов, такой как следующий:

[
    {
        "left" : { "gameId" : 3, "id" : 2, "player" : "Agatha" },
        "right" : { "id" : 3, "field" : "Bucklebury" }
    },
    {
        "left" : { "gameId" : 2, "id" : 3, "player" : "Fred" },
        "right" : { "id" : 2, "field" : "Rushock Bog" }
    },
    ...
]

Подробнее об этой команде →

zip

stream.zip() → stream
array.zip() → array

Используется для ‘сжатия’ результата объединения путём слияния полей ‘right’ в поля ‘left’ каждого члена последовательности.

Пример: ‘сжимает’ последовательность путём слияния полей слева и справа, полученных в результате объединения.

r.table("marvel").eqJoin("main_dc_collaborator", r.table("dc")).zip().run(conn);

Подробнее об этой команде →

Преобразования

map

sequence1.map([sequence2, ...], function) → stream
array1.map([array2, ...], function) → array
r.map(sequence1[, sequence2, ...], function) → stream
r.map(array1[, array2, ...], function) → array

Преобразует каждый элемент одной или нескольких последовательностей, применяя к ним функцию отображения. Если map используется с двумя или более последовательностями, оно будет итерироваться по количеству элементов, содержащемуся в самой короткой последовательности.

Пример: Возвращает первые пять квадратов.

r.expr(r.array(1, 2, 3, 4, 5)).map(val -> r.mul(val, val)).run(conn);

// Result:
[1, 4, 9, 16, 25]

Подробнее об этой команде →

withFields

sequence.withFields([selector1, selector2...]) → stream
array.withFields([selector1, selector2...]) → array

Извлекает одно или несколько атрибутов из последовательности объектов, отфильтровывая любые объекты в последовательности, у которых отсутствуют указанные поля. Функционально это идентично hasFields, за которым следует pluck над последовательностью.

Пример: Получение списка пользователей и их постов, исключая пользователей, которые не создали никаких постов.

Структура существующей таблицы:

[
    { "id": 1, "user": "bob", "email": "bob@foo.com", "posts": [ 1, 4, 5 ] },
    { "id": 2, "user": "george", "email": "george@foo.com" },
    { "id": 3, "user": "jane", "email": "jane@foo.com", "posts": [ 2, 3, 6 ] }
]

Команда и вывод:

r.table("users").withFields("id", "user", "posts").run(conn);

// Result passed to callback
[
    { "id": 1, "user": "bob", "posts": [ 1, 4, 5 ] },
    { "id": 3, "user": "jane", "posts": [ 2, 3, 6 ] }
]

Подробнее об этой команде →

concatMap

stream.concatMap(function) → stream
array.concatMap(function) → array

Объединяет один или несколько элементов в одну последовательность с помощью функции отображения.

Пример: Построение последовательности всех монстров, побежденных героями Marvel. Поле «defeatedMonsters» — это массив из одного или нескольких имен монстров.

r.table("marvel").concatMap(hero -> hero.g("defeatedMonsters")).run(conn);

Подробнее об этой команде →

orderBy

table.orderBy([key | function]).optArg("index", index) → selection<stream>
selection.orderBy(key | function[, ...]) → selection<array>
sequence.orderBy(key | function[, ...]) → array

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

Пример: Сортировка всех постов по индексу date.

r.table("posts").orderBy().optArg("index", "date").run(conn);

Подробнее об этой команде →

skip

sequence.skip(n) → stream
array.skip(n) → array

Пропускает заданное количество элементов из начала последовательности.

Пример: Здесь в сочетании с orderBy мы выбираем пропустить самых успешных героев.

r.table("marvel").orderBy("successMetric").skip(10).run(conn);

Подробнее об этой команде →

limit

sequence.limit(n) → stream
array.limit(n) → array

Завершает последовательность после заданного количества элементов.

Пример: В нашем Пантеоне героев помещаются только некоторые.

r.table("marvel").orderBy("belovedness").limit(10).run(conn);

Подробнее об этой команде →

slice

selection.slice(startOffset[, endOffset]) → selection
stream.slice(startOffset[, endOffset]) → stream
array.slice(startOffset[, endOffset]) → array
binary.slice(startOffset[, endOffset]) → binary
string.slice(startOffset[, endOffset]) → string

Возвращает элементы последовательности в заданном диапазоне.

Пример: Возвращает четвертого, пятого и шестого самых молодых игроков. (Самый молодой игрок имеет индекс 0, поэтому это элементы 3–5.)

r.table("players").orderBy().optArg("index", "age").slice(3, 6).run(conn);

Подробнее об этой команде →

nth

sequence.nth(index) → object
selection.nth(index) → selection<object>

Получает n-ый элемент последовательности, считая с нуля. Если аргумент отрицательный, считает с последнего элемента.

Пример: Выбрать второй элемент в массиве.

r.expr(r.array(1,2,3)).nth(1).run(conn);

Подробнее об этой команде →

offsetsOf

sequence.offsetsOf(datum | predicate_function) → array

Получает индексы элемента в последовательности. Если аргумент — предикат, получает индексы всех элементов, соответствующих ему.

Пример: Найти позицию буквы ‘c’.

r.expr(r.array("a", "b", "c")).offsetsOf("c").run(conn);

Подробнее об этой команде →

isEmpty

sequence.isEmpty() → bool

Проверяет, пуста ли последовательность.

Пример: Есть ли какие-либо документы в таблице marvel?

r.table("marvel").isEmpty().run(conn);

Подробнее об этой команде →

union

stream.union(sequence[, sequence, ...]) → stream
array.union(sequence[, sequence, ...]) → array
r.union(stream, sequence[, sequence, ...]) → stream
r.union(array, sequence[, sequence, ...]) → array

Объединяет две или более последовательностей.

Пример: Построение потока всех героев.

r.table("marvel").union(r.table("dc")).run(conn);

Подробнее об этой команде →

sample

sequence.sample(number) → selection
stream.sample(number) → array
array.sample(number) → array

Выбирает заданное количество элементов из последовательности с равномерным распределением случайных чисел. Выбор осуществляется без повторений.

Пример: Выберите 3 случайных героя.

r.table("marvel").sample(3).run(conn);

Подробнее об этой команде →

Агрегация

group

sequence.group([field | function...,]) → grouped_stream
r.group(sequence, [field | function...,]) → grouped_stream

Принимает поток и разбивает его на несколько групп на основе предоставленных полей или функций.

Пример: Сгруппировать игры по игрокам.

r.table("games").group("player").run(conn);

Для отображения возвращаемых данных мы снова будем использовать JSON-представление, с group и values в качестве полей, соответствующих элементам в каждой GroupedResult.

[
    {
        "group": "Alice",
        "values": [
            {"id": 5, "player": "Alice", "points": 7, "type": "free"},
            {"id": 12, "player": "Alice", "points": 2, "type": "free"}
        ]
    },
    {
        "group": "Bob",
        "values": [
            {"id": 2, "player": "Bob", "points": 15, "type": "ranked"},
            {"id": 11, "player": "Bob", "points": 10, "type": "free"}
        ]
    }
]

Подробнее об этой команде →

ungroup

grouped_stream.ungroup() → array
grouped_data.ungroup() → array

Принимает сгруппированный поток или сгруппированные данные и преобразует их в массив объектов, представляющих группы. Любые команды, присоединённые после ungroup, будут работать с этим массивом, а не с каждой группой по отдельности. Это полезно, если, например, вы хотите отсортировать группы по значению их сокращения.

Пример: Каково максимальное количество очков, набранных каждым игроком, с самыми результативными игроками впереди?

r.table("games").group("player").max("points").g("points").ungroup()
 .orderBy(r.desc("reduction")).run(conn);

Подробнее об этой команде →

reduce

sequence.reduce(function) → value
r.reduce(sequence, function) → value

Производит одно значение из последовательности посредством многократного применения функции сокращения.

Пример: Вернуть количество документов в таблице posts.

r.table("posts").map(doc -> 1).reduce(
    (left, right) -> left.add(right)
).default_(0).run(conn);

Более короткий способ выполнения этого запроса — использовать count.

Подробнее об этой команде →

fold

sequence.fold(base, function) → value
sequence.fold(base, function).optArg("emit", function)[.optArg("final_emit", function)] → sequence

Применяет функцию к последовательности в порядке, сохраняя состояние через накопитель. Команда fold возвращает либо одно значение, либо новую последовательность.

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

r.table("words").orderBy("id").fold("",
    (acc, word) -> acc.add(r.branch(r.eq(acc, ""), "", ", ")).add(word)
).run(conn);

(Этот пример можно реализовать с помощью reduce, но fold сохранит порядок, когда words представляет собой таблицу RethinkDB или другой поток, что не гарантируется с reduce.)

Подробнее об этой команде →

count

sequence.count([value | predicate_function]) → number
binary.count() → number
string.count() → number
object.count() → number
r.count(sequence | binary | string | object[, predicate_function]) → number

Подсчитывает количество элементов в последовательности или пар ключ/значение в объекте, или возвращает размер строки или двоичного объекта.

Пример: Подсчитать количество пользователей.

r.table("users").count().run(conn);

Подробнее об этой команде →

sum

sequence.sum([field | function]) → number
r.sum(sequence, [field | function]) → number

Суммирует все элементы последовательности. Если вызывается с именем поля, суммирует все значения этого поля в последовательности, пропускает элементы последовательности, которым это поле не принадлежит. Если вызывается с функцией, применяет эту функцию к каждому элементу последовательности и суммирует результаты, пропускает элементы последовательности, где эта функция возвращает null или ошибку не-существования.

Пример: Какова сумма 3 + 5 + 7?

r.expr(r.array(3, 5, 7)).sum().run(conn);

Подробнее об этой команде →

avg

sequence.avg([field | function]) → number
r.avg(sequence, [field | function]) → number

Вычисляет среднее значение всех элементов последовательности. Если вызывается с именем поля, вычисляет среднее значение всех значений этого поля в последовательности, пропускает элементы последовательности, которым это поле не принадлежит. Если вызывается с функцией, применяет эту функцию к каждому элементу последовательности и вычисляет среднее значение результатов, пропускает элементы последовательности, где эта функция возвращает null или ошибку не-существования.

Пример: Каково среднее значение 3, 5 и 7?

r.expr(r.array(3, 5, 7)).avg().run(conn);

Подробнее об этой команде →

min

sequence.min([field | function]) → element
r.min(sequence, [field | function]) → element

Находит минимальный элемент последовательности.

Пример: Вернуть минимальное значение в списке [3, 5, 7].

r.expr(r.array(3, 5, 7)).min().run(conn);

Подробнее об этой команде →

max

sequence.max([field | function]) → element
r.max(sequence, [field | function]) → element

Находит максимальный элемент последовательности.

Пример: Вернуть максимальное значение в списке [3, 5, 7].

r.expr(r.array(3, 5, 7)).max().run(conn);

Подробнее об этой команде →

distinct

sequence.distinct() → array
table.distinct() → stream
r.distinct(sequence) → array
r.distinct(table) → stream

Удаляет дубликаты из элементов в последовательности.

Пример: Какие уникальные злодеи были побеждены героями Marvel?

r.table("marvel").concatMap(
    hero -> hero.g("villain_list")
).distinct().run(conn);

Подробнее об этой команде →

contains

sequence.contains([value | predicate_function, ...]) → bool
r.contains(sequence, [value | predicate_function, ...]) → bool

При вызове со значениями возвращает true, если последовательность содержит все указанные значения. При вызове с предикантными функциями возвращает true, если для каждого предиката существует по крайней мере один элемент потока, где этот предикат возвращает true.

Пример: Железный человек когда-либо сражался с Суперменом?

r.table("marvel").get("ironman").g("opponents").contains("superman").run(conn);

Подробнее об этой команде →

Обработка документов

pluck

sequence.pluck([selector1, selector2...]) → stream
array.pluck([selector1, selector2...]) → array
object.pluck([selector1, selector2...]) → object
singleSelection.pluck([selector1, selector2...]) → object

Вытаскивает одно или несколько атрибутов из объекта или последовательности объектов (проекция).

Пример: Нам нужна только информация о реакторе Железного человека, а не весь остальной документ.

r.table("marvel").get("IronMan").pluck("reactorState", "reactorPower").run(conn);

Подробнее об этой команде →

without

sequence.without([selector1, selector2...]) → stream
array.without([selector1, selector2...]) → array
singleSelection.without([selector1, selector2...]) → object
object.without([selector1, selector2...]) → object

Противное pluck; принимает объект или последовательность объектов и возвращает их с удалёнными указанными полями или путями.

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

r.table("marvel").get("IronMan").without("personalVictoriesList").run(conn);

Подробнее об этой команде →

merge

singleSelection.merge([object | function, object | function, ...]) → object
object.merge([object | function, object | function, ...]) → object
sequence.merge([object | function, object | function, ...]) → stream
array.merge([object | function, object | function, ...]) → array

Объединяет два или более объектов для создания нового объекта со свойствами из всех. При конфликте имён полей предпочтение отдаётся полям в правом объекте в списке аргументов. merge также принимает функцию, которая возвращает объект, который будет использоваться аналогично функции map.

Пример: Подготовьте Тора к битве.

r.table("marvel").get("thor")
 .merge(r.table("equipment").get("hammer"),
        r.table("equipment").get("pimento_sandwich"))
 .run(conn);

Подробнее об этой команде →

append

array.append(value) → array

Добавляет значение в массив.

Пример: Получить список снаряжения Железного человека с добавлением новых ботинок.

r.table("marvel").get("IronMan").g("equipment").append("newBoots").run(conn);

Подробнее об этой команде →

prepend

array.prepend(value) → array

Добавляет значение в начало массива.

Пример: Получить список снаряжения Железного человека с добавлением новых ботинок.

r.table("marvel").get("IronMan").g("equipment").prepend("newBoots").run(conn);

Подробнее об этой команде →

difference

array.difference(array) → array

Удаляет элементы одного массива из другого массива.

Пример: Получить список снаряжения Железного человека без ботинок.

r.table("marvel").get("IronMan").g("equipment").difference(r.array("Boots"))
 .run(conn);

Подробнее об этой команде →

setInsert

array.setInsert(value) → array

Добавляет значение в массив и возвращает его как множество (массив с уникальными значениями).

Пример: Получить список снаряжения Железного человека с добавлением новых ботинок.

r.table("marvel").get("IronMan").g("equipment").setInsert("newBoots").run(conn);

Подробнее об этой команде →

setUnion

array.setUnion(array) → array

Выполняет пересечение двух массивов, возвращая массив со всеми уникальными элементами из обоих.

Пример: Получить список снаряжения Железного человека с добавлением новых ботинок и реактора.

r.table("marvel").get("IronMan").g("equipment")
 .setUnion(r.array("newBoots", "arc_reactor")).run(conn);

Подробнее об этой команде →

setIntersection

array.setIntersection(array) → array

Пересекает два массива, возвращая значения, встречающиеся в обоих из них, как множество (массив с уникальными значениями).

Пример: Проверить, какие части снаряжения Железного человека есть из заданного списка.

r.table("marvel").get("IronMan").g("equipment")
 .setIntersection(r.array("newBoots", "arc_reactor")).run(conn);

Подробнее об этой команде →

setDifference

array.setDifference(array) → array

Удаляет элементы одного массива из другого и возвращает их как множество (массив с уникальными значениями).

Пример: Проверить, какие части снаряжения Железного человека есть, исключая заданный список.

r.table("marvel").get("IronMan").g("equipment")
 .setDifference(r.array("newBoots", "arc_reactor")).run(conn);

Подробнее об этой команде →

bracket

sequence.bracket(attr) → sequence
singleSelection.bracket(attr) → value
object.bracket(attr) → value
array.bracket(index) → value

Получает одно поле из объекта. Если вызывается для последовательности, получает это поле из каждого объекта в последовательности, пропуская объекты, в которых его нет.

Пример: Какое было первое появление Железного человека в комиксе?

r.table("marvel").get("IronMan").bracket("firstAppearance").run(conn);
// more idiomatically:
r.table("marvel").get("IronMan").g("firstAppearance").run(conn);

Подробнее об этой команде →

getField, g

sequence.g(attr) → sequence
singleSelection.g(attr) → value
object.g(attr) → value

Получает одно поле из объекта. Если вызывается для последовательности, получает это поле из каждого объекта в последовательности, пропуская объекты, в которых его нет.

Пример: Какое было первое появление Железного человека в комиксе?

r.table("marvel").get("IronMan").g("firstAppearance").run(conn);

Подробнее об этой команде →

hasFields

sequence.hasFields([selector1, selector2...]) → stream
array.hasFields([selector1, selector2...]) → array
object.hasFields([selector1, selector2...]) → boolean

Проверяет, есть ли у объекта одно или несколько полей. Объект имеет поле, если у него есть этот ключ и ключ имеет значение, отличное от null. Например, объект {'a': 1,'b': 2,'c': null} имеет поля a и b.

Пример: Вернуть игроков, которые выиграли игры.

r.table("players").hasFields("games_won").run(conn);

Подробнее об этой команде →

insertAt

array.insertAt(offset, value) → array

Вставляет значение в массив по заданному индексу. Возвращает изменённый массив.

Пример: Халк решает присоединиться к Мстителям.

r.expr(r.array("Iron Man", "Spider-Man")).insertAt(1, "Hulk").run(conn);

Подробнее об этой команде →

spliceAt

array.spliceAt(offset, array) → array

Вставляет несколько значений в массив по заданному индексу. Возвращает изменённый массив.

Пример: Халк и Тор решают присоединиться к Мстителям.

r.expr(r.array("Iron Man", "Spider-Man"))
 .spliceAt(1, r.array("Hulk", "Thor")).run(conn);

Подробнее об этой команде →

deleteAt

array.deleteAt(offset [,endOffset]) → array

Удаляет один или несколько элементов из массива по заданному индексу. Возвращает изменённый массив. (Примечание: deleteAt работает с массивами, а не с документами; для удаления документов см. команду delete).

Пример: Удалить второй элемент массива.

r.expr(r.array("a", "b", "c", "d", "e", "f")).deleteAt(1).run(conn);

// Result:
["a", "c", "d", "e", "f"]

Подробнее об этой команде →

changeAt

array.changeAt(offset, value) → array

Изменяет значение в массиве по заданному индексу. Возвращает изменённый массив.

Пример: Брюс Баннер превращается в Халка.

r.expr(r.array("Iron Man", "Bruce", "Spider-Man")).changeAt(1, "Hulk")
 .run(conn);

Подробнее об этой команде →

keys

singleSelection.keys() → array
object.keys() → array

Возвращает массив, содержащий все ключи объекта. Обратите внимание, что ключи будут отсортированы, как описано в Типы данных ReQL (для строк — лексикографически).

Пример: Получить все ключи из строки таблицы.

// row: { "id": 1, "mail": "fred@example.com", "name": "fred" }

r.table("users").get(1).keys().run(conn);

// Result:
[ "id", "mail", "name" ]

Подробнее об этой команде →

values

singleSelection.values() → array
object.values() → array

Возвращает массив, содержащий все значения объекта. values() гарантирует, что значения будут выведены в том же порядке, что и ключи keys.

Пример: Получить все значения из строки таблицы.

// row: { "id": 1, "mail": "fred@example.com", "name": "fred" }

r.table("users").get(1).values().run(conn);

// Result:
[ 1, "fred@example.com", "fred" ]

Подробнее об этой команде →

literal

r.literal(object) → special

Заменяет объект в поле вместо слияния его с существующим объектом в операции merge или update. Использование literal без аргументов в операции merge или update удалит соответствующее поле.

Пример: Замените один вложенный документ другим, а не объединяйте поля.

r.table("users").get(1)
 .update(r.hashMap("data", r.literal(r.hashMap("age", 19).with("job", "Engineer"))))
 .run(conn);

// Result:
{
    "id": 1,
    "name": "Alice",
    "data": {
        "age": 19,
        "job": "Engineer"
    }
}

Подробнее об этой команде →

object

r.object([key, value,]...) → object

Создаёт объект из списка пар ключ-значение, где ключи должны быть строками. r.object(A, B, C, D) эквивалентно r.expr([[A, B], [C, D]]).coerce_to('OBJECT').

Пример: Создать простой объект.

r.object("id", 5, "data", r.array("foo", "bar")).run(conn);

// Result:
{ "data": ["foo", "bar"], "id": 5}

Подробнее об этой команде →

Обработка строк

match

string.match(regexp) → null/object

Сопоставляет строку с регулярным выражением. Если совпадение найдено, возвращает объект с полями:

  • str: Совпавшая строка
  • start: Начало совпавшей строки
  • end: Конец совпавшей строки
  • groups: Группы захвата, определённые в скобках

Если совпадение не найдено, возвращает null.

Пример: Получить всех пользователей, чьё имя начинается с «A». Поскольку null вычисляется как false в filter, вы можете использовать результат match в качестве предиката.

r.table("users").filter(doc -> doc.g("name").match("^A")).run(conn);

Подробнее об этой команде →

split

string.split([separator, [max_splits]]) → array

Разделяет строку на подстроки. Без аргументов разделяет по пробелам; если в качестве первого аргумента указана строка, разделяет по этой строке. Также можно указать максимальное количество разделений. (Чтобы указать max_splits, сохраняя при этом разделение по пробелам, используйте null в качестве аргумента разделителя.)

Пример: Разделение по пробелам.

r.expr("foo  bar bax").split().run(conn);

Результат:

["foo", "bar", "bax"]

Подробнее об этой команде →

upcase

string.upcase() → string

Преобразует строку в верхний регистр.

Пример:

r.expr("Sentence about LaTeX.").upcase().run(conn);

Результат:

"SENTENCE ABOUT LATEX."

Примечание: upcase и downcase влияют только на символы ASCII.

Подробнее об этой команде →

downcase

string.downcase() → string

Преобразует строку в нижний регистр.

Пример:

r.expr("Sentence about LaTeX.").downcase().run(conn);

Результат:

"sentence about latex."

Примечание: upcase и downcase влияют только на символы ASCII.

Подробнее об этой команде →

Математика и логика

add

value.add(value[, value, ...]) → value
time.add(number[, number, ...]) → time

Сложить два или более чисел или конкатенировать две или более строки или массивы.

Пример: Это так же просто, как 2 + 2 = 4.

r.expr(2).add(2).run(conn);

// Result:
4

Подробнее об этой команде →

sub

number.sub(number[, number, ...]) → number
time.sub(number[, number, ...]) → time
time.sub(time) → number

Вычесть два числа.

Пример: Это так же просто, как 2 - 2 = 0.

r.expr(2).sub(2).run(conn);

Подробнее об этой команде →

mul

number.mul(number[, number, ...]) → number
array.mul(number[, number, ...]) → array

Умножить два числа или создать периодический массив.

Пример: Это так же просто, как 2 * 2 = 4.

r.expr(2).mul(2).run(conn);

Подробнее об этой команде →

div

number.div(number[, number ...]) → number

Разделить два числа.

Пример: Это так же просто, как 2 / 2 = 1.

r.expr(2).div(2).run(conn);

Подробнее об этой команде →

mod

number.mod(number) → number

Пример: Это так же просто, как 2 % 2 = 0.

r.expr(2).mod(2).run(conn);

Подробнее об этой команде →

and

bool.and([bool, bool, ...]) → bool
r.and([bool, bool, ...]) → bool

Вычислить логическое «и» одного или нескольких значений.

Пример: Вернуть, являются ли оба a и b истинными.

boolean a = true;
boolean b = false;
r.expr(a).and(b).run(conn);

// Result:
false

Подробнее об этой команде →

or

bool.or([bool, bool, ...]) → bool
r.or([bool, bool, ...]) → bool

Вычислить логическое «или» одного или нескольких значений.

Пример: Вернуть, является ли либо a, либо b истинным.

boolean a = true;
boolean b = false;
r.expr(a).or(b).run(conn);

// Result:
true

Подробнее об этой команде →

eq

value.eq(value[, value, ...]) → bool

Проверить, равны ли два или более значения.

Пример: Убедиться, что поле role пользователя установлено в administrator.

r.table("users").get(1).g("role").eq("administrator").run(conn);

Подробнее об этой команде →

ne

value.ne(value[, value, ...]) → bool

Проверить, не равны ли два или более значения.

Пример: Убедиться, что поле role пользователя не установлено в administrator.

r.table("users").get(1).g("role").ne("administrator").run(conn);

Подробнее об этой команде →

gt

value.gt(value[, value, ...]) → bool

Сравнить значения, проверив, больше ли левое значение правого.

Пример: Проверить, набрал ли игрок более 10 очков.

r.table("players").get(1).g("score").gt(10).run(conn);

Подробнее об этой команде →

ge

value.ge(value[, value, ...]) → bool

Сравнить значения, проверив, больше ли или равно левое значение правому.

Пример: Проверить, набрал ли игрок 10 очков или больше.

r.table("players").get(1).g("score").ge(10).run(conn);

Подробнее об этой команде →

lt

value.lt(value[, value, ...]) → bool

Сравнить значения, проверив, меньше ли левое значение правого.

Пример: Проверить, набрал ли игрок менее 10 очков.

r.table("players").get(1).g("score").lt(10).run(conn);

Подробнее об этой команде →

le

value.le(value[, value, ...]) → bool

Сравнить значения, проверив, меньше ли или равно левое значение правому.

Пример: Проверить, набрал ли игрок 10 очков или меньше.

r.table("players").get(1).g("score").le(10).run(conn);

Подробнее об этой команде →

not

bool.not() → bool
r.not(bool) → bool

Вычислить логическое отрицание (не) выражения.

Пример: Не истина – ложь.

r(true).not().run(conn);
r.not(true).run(conn);

Эти значения эквивалентны false.

Подробнее об этой команде →

bitAnd

r.bitAnd(number) → number
r.bitAnd(number[, number, ...]) → number

Вычислить арифметическое «и» одного или нескольких значений. bitAnd принимает одно или несколько аргументов.

Пример: Вычислить арифметическое «и» 6 и 4

r.expr(6).bitAnd(4).run(conn)

Подробнее об этой команде →

bitOr

r.bitOr(number) → number
r.bitOr(number[, number, ...]) → number

Вычислить арифметическое «или» одного или нескольких значений. bitOr принимает одно или несколько аргументов.

Пример: Вычислить арифметическое «или» 6 и 4

r.expr(6).bitOr(4).run(conn)

Подробнее об этой команде →

bitXor

r.bitXor(number) → number
r.bitXor(number[, number, ...]) → number

Вычислить арифметическое «и» одного или нескольких значений. bitXor принимает одно или несколько аргументов.

Пример: Вычислить арифметическое «и» 6 и 4

r.expr(6).bitXor(4).run(conn)

Подробнее об этой команде →

bitNot

r.bitNot() → number

Вычислить арифметическое отрицание (не) выражения. bitNot не принимает аргументов.

Пример: Отрицать арифметическое выражение

r.expr(15).bitNot().run(conn)

Подробнее об этой команде →

bitSal

r.bitSal(number) → number
r.bitSal(number[, number, ...]) → number

Вычислить арифметический сдвиг влево (левый логический сдвиг) одного или нескольких значений. bitSal принимает одно или несколько аргументов.

Пример: Вычислить арифметический сдвиг влево 5 и 4

r.expr(5).bitSal(4).run(conn)

Подробнее об этой команде →

bitSar

r.bitSar(number) → number
r.bitSar(number[, number, ...]) → number

Вычислить арифметический сдвиг вправо одного или нескольких значений. bitSar принимает одно или несколько аргументов.

Пример: Вычислить арифметический сдвиг вправо 32 и 3

r.expr(32).bitSar(3).run(conn)

Подробнее об этой команде →

random

r.random() → number
r.random(number[, number]) → number
r.random(integer[, integer]) → integer

Сгенерировать случайное число в заданных (или подразумеваемых) пределах. random принимает ноль, одно или два аргумента, а также может принять optArg float.

Пример: Сгенерировать случайное число в диапазоне [0,1)

r.random().run(conn);

Подробнее об этой команде →

round

r.round(number) → number
number.round() → number

Округляет данное значение до ближайшего целого числа.

Пример: Округлить 12.345 до ближайшего целого.

r.round(12.345).run(conn);

// Result:
12.0

Команда round также может быть подключена к выражению.

Подробнее об этой команде →

ceil

r.ceil(number) → number
number.ceil() → number

Округляет данное значение вверх, возвращая наименьшее целое число, большее или равное данному значению (потолок значения).

Пример: Вернуть потолок 12.345.

r.ceil(12.345).run(conn);

// Result:
13.0

Команда ceil также может быть подключена к выражению.

Подробнее об этой команде →

floor

r.floor(number) → number
number.floor() → number

Округляет данное значение вниз, возвращая наибольшее целое значение, меньшее или равное данному значению (пол значения).

Пример: Вернуть пол 12.345.

r.floor(12.345).run(conn);

// Result:
12.0

Команда floor также может быть подключена к выражению.

Подробнее об этой команде →

Даты и время

now

r.now() → time

Возвращает объект времени, представляющий текущее время в UTC. Команда now() вычисляется один раз при получении запроса сервером, поэтому несколько экземпляров r.now() всегда возвращают одно и то же время внутри запроса.

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

r.table("users").insert(
    r.hashMap("name", "John")
     .with("subscription_date", r.now())
).run(conn);

Подробнее об этой команде →

time

r.time(year, month, day[, hour, minute, second], timezone) → time

Создаёт объект времени для определённого момента.

Пример: Обновить дату рождения пользователя «Иван» на 3 ноября 1986 года по UTC.

r.table("user").get("John").update(
    r.hashMap("birthdate", r.time(1986, 11, 3, 'Z'))
).run(conn);

Подробнее об этой команде →

epochTime

r.epochTime(number) → time

Создаёт объект времени на основе секунд, прошедших с эпохи. Первый аргумент — double, который будет округлен до трёх знаков после запятой (точность до миллисекунды).

Пример: Обновить дату рождения пользователя «Иван» на 3 ноября 1986 года.

r.table("user").get("John").update(
    r.hashMap(birthdate, r.epochTime(531360000))
).run(conn);

Подробнее об этой команде →

iso8601

r.iso8601(string) → time

Создаёт объект времени на основе строки даты и времени в формате ISO 8601 (например, ‘2013-01-01T01:01:01+00:00’). RethinkDB поддерживает все допустимые форматы ISO 8601, кроме дат недели. Подробнее о формате ISO 8601 на Википедии.

Пример: Обновить время рождения Ивана.

r.table("user").get("John").update(
    r.hashMap("birth", r.iso8601("1986-11-03T08:30:00-07:00"))
).run(conn);

Подробнее об этой команде →

inTimezone

time.inTimezone(timezone) → time

Возвращает новый объект времени с другим часовым поясом. Время остаётся тем же, но результаты, возвращаемые методами, такими как hours(), изменятся, так как они учитывают часовой пояс. Аргумент часового пояса должен быть в формате ISO 8601.

Пример: Час дня в Сан-Франциско (UTC/GMT -8, без летнего времени).

r.now().inTimezone("-08:00").hours().run(conn);

Подробнее об этой команде →

timezone

time.timezone() → string

Возвращает часовой пояс объекта времени.

Пример: Возвратить всех пользователей в часовом поясе «-07:00».

r.table("users").filter(
    user -> user.g("subscriptionDate").timezone().eq("-07:00")
).run(conn);

Подробнее об этой команде →

during

time.during(startTime, endTime) → bool

Возвращает, находится ли время между двумя другими временами.

Пример: Получить все сообщения, опубликованные между 1 декабря 2013 года (включительно) и 10 декабря 2013 года (исключительно).

r.table("posts").filter(
    row -> row.g("date").during(r.time(2013, 12, 1, "Z"), r.time(2013, 12, 10, "Z"))
).run(conn);

Подробнее об этой команде →

date

time.date() → time

Возвращает новый объект [OffsetDateTime][odt], основанный только на дне, месяце и году (то есть тот же день в 00:00).

Пример: Получить всех пользователей, чей день рождения сегодня.

r.table("users").filter(
    user -> user.g("birthdate").date().eq(r.now().date())
).run(conn);

Подробнее об этой команде →

timeOfDay

time.timeOfDay() → number

Возвращает количество секунд, прошедших с начала дня, хранящегося в объекте времени.

Пример: Получить сообщения, отправленные до полудня.

r.table("posts").filter(
    post -> post.g("date").timeOfDay().le(12*60*60)
).run(conn);

Подробнее об этой команде →

year

time.year() → number

Возвращает год объекта времени.

Пример: Получить всех пользователей, родившихся в 1986 году.

r.table("users").filter(
    user -> user.g("birthdate").year().eq(1986)
}).run(conn);

Подробнее об этой команде →

month

time.month() → number

Возвращает месяц объекта времени как число от 1 до 12. Для удобства определены термины r.january, r.february и т.д., сопоставленные с соответствующими целыми числами.

Пример: Получить всех пользователей, родившихся в ноябре.

r.table("users").filter(row -> row.g("birthdate").month().eq(11)).run(conn);

Подробнее об этой команде →

day

time.day() → number

Возвращает день объекта времени как число от 1 до 31.

Пример: Возвратить пользователей, родившихся 24 числа любого месяца.

r.table("users").filter(
    row -> row.g("birthdate").day().eq(24)
).run(conn);

Подробнее об этой команде →

dayOfWeek

time.dayOfWeek() → number

Возвращает день недели объекта времени как число от 1 до 7 (в соответствии со стандартом ISO 8601). Для удобства определены термины r.monday, r.tuesday и т.д., сопоставленные с соответствующими целыми числами.

Пример: Возвратить день недели сегодня.

r.now().dayOfWeek().run(conn);

Подробнее об этой команде →

dayOfYear

time.dayOfYear() → number

Возвращает день года объекта времени как число от 1 до 366 (в соответствии со стандартом ISO 8601).

Пример: Получить всех пользователей, родившихся 1 числа любого года.

r.table("users").filter(
    row -> row.g("birthdate").dayOfYear().eq(1)
).run(conn);

Подробнее об этой команде →

hours

time.hours() → number

Возвращает час в объекте времени как число от 0 до 23.

Пример: Возвратить все сообщения, отправленные после полуночи и до 4 утра.

r.table("posts").filter(post -> post.g("date").hours().lt(4)).run(conn);

Подробнее об этой команде →

minutes

time.minutes() → number

Возвращает минуту в объекте времени как число от 0 до 59.

Пример: Возвратить все сообщения, отправленные в первые 10 минут каждого часа.

r.table("posts").filter(post -> post.g("date").minutes().lt(10)).run(conn);

Подробнее об этой команде →

seconds

time.seconds() → number

Возвращает секунды в объекте времени как число от 0 до 59.999 (двойная точность).

Пример: Возвратить сообщение, отправленное в первые 30 секунд каждой минуты.

r.table("posts").filter(post -> post.g("date").seconds().lt(30)).run(conn);

Подробнее об этой команде →

toIso8601

time.toIso8601() → string

Преобразует объект времени в строку в формате ISO 8601.

Пример: Возвратить текущее время в формате ISO 8601.

r.now().toIso8601().run(conn);

// Result:
"2015-04-20T18:37:52.690+00:00"

Подробнее об этой команде →

toEpochTime

time.toEpochTime() → number

Преобразует объект времени в его время эпохи.

Пример: Возвратить текущее время в секундах с момента эпохи Unix с точностью до миллисекунды.

r.now().toEpochTime().run(conn);

Подробнее об этой команде →

Структуры управления

array

r.array(value[, value...]) → array

Принимает один или несколько значений в качестве аргументов и возвращает массив. (Технически, возвращает объект [List][].)

Пример: Создание массива.

r.expr(r.array(10, 20, 30)).run(conn);

Это эквивалент команды ReQL:

List<Integer> myArray = Arrays.asList(10, 20, 30);

Подробнее об этой команде →

hashMap

r.hashMap(key, value)[.with(key, value) ...] → object

Принимает пару «ключ-значение», с дополнительными парами «ключ-значение», которые могут быть указаны цепочкой одного или нескольких with(key, value) терминов после hashMap, и возвращает объект.

Пример: Создание хешмапы.

import com.rethinkdb.model.MapObject;

MapObject newData = r.hashMap("user", "fred")
    .with("email", "fred@example.com")
    .with("id", 101)
    .with("admin", true);

Это создаёт объект (в формате JSON):

{
    "admin": true,
    "email": "fred@example.com",
    "id": 101,
    "user": "fred"
}

Подробнее об этой команде →

args

r.args(array) → special

r.args — специальный термин, используемый для вставки массива аргументов в другой термин. Это полезно, когда вы хотите вызвать многоаргументный термин, такой как getAll, с набором аргументов, созданных во время выполнения.

Пример: Получение Alice и Bob из таблицы people.

r.table("people").getAll("Alice", "Bob").run(conn);
// or
r.table("people").getAll(r.args(r.array("Alice", "Bob"))).run(conn);

Подробнее об этой команде →

binary

r.binary(data) → binary

Встраивание бинарных данных в запрос.

Пример: Сохранение изображения аватара в существующей записи пользователя.

import java.nio.file.*;

Path path = Paths.get("./defaultAvatar.png");
byte[] avatarImage = Files.readAllBytes(path);
r.table("users").get(100).update(r.hashMap("avatar", avatarImage));

Подробнее об этой команде →

do_

any.do_(function) → any
r.do_([args]*, function) → any
any.do_(expr) → any
r.do_([args]*, expr) → any

Вызов анонимной функции, используя возвращаемые значения других команд или запросов ReQL в качестве аргументов.

Пример: Вычисление нетто-результата гольфиста для игры.

r.table("players").get("86be93eb-a112-48f5-a829-15b2cb49de1d").do_(
    player -> player.g("gross_score").sub(player.g("course_handicap"))
).run(conn);

Подробнее об этой команде →

branch

r.branch(test, true_action[, test2, test2_action, ...], false_action) → any
test.branch(true_action[, test2, test2_action, ...], false_action) → any

Выполнение условного ветвления, эквивалентного if-then-else.

Команда branch принимает 2n+1 аргументов: пары условных выражений и команд, которые будут выполнены, если условные выражения вернут любое значение, кроме false или null (т.е., «истинное» значение), с окончательной командой «else», которая будет выполнена, если все условные выражения являются false или null.

Пример: Проверка значения x.

int x = 10;
r.branch(r.expr(x).gt(5), "big", "small").run(conn);

// Result:
"big"

Подробнее об этой команде →

forEach

sequence.forEach(write_function) → object

Итерация по последовательности, выполняя заданный запрос записи для каждого элемента.

Пример: Теперь, когда наши герои победили своих злодеев, мы можем безопасно удалить их из таблицы злодеев.

r.table("marvel").forEach(
    hero -> r.table("villains").get(hero.g("villainDefeated")).delete()
).run(conn);

Подробнее об этой команде →

range

r.range() → stream
r.range([startValue, ]endValue) → stream

Генерация потока последовательных целых чисел в заданном диапазоне.

Пример: Возвращение диапазона из четырёх элементов [0, 1, 2, 3].

r.range(4).run(conn);

Результат (показан в формате JSON):

[0, 1, 2, 3]

Подробнее об этой команде →

error

r.error(message) → error

Выбрасывает ошибку выполнения. Если вызвана без аргументов внутри второго аргумента команды default, повторно выбрасывает текущую ошибку.

Пример: Железный человек не мог проиграть битву:

r.table("marvel").get("IronMan").do_(
    ironman -> r.branch(
        ironman.g("victories").lt(ironman.g("battles")),
        r.error("impossible code path"),
        ironman
    )
).run(conn);

Подробнее об этой команде →

default

value.default(default_value) → any
sequence.default(default_value) → any

Предоставляет значение по умолчанию в случае ошибок несуществования. Команда default оценивает свой первый аргумент (значение, к которому она прицеплена). Если этот аргумент возвращает null или при оценке выбрасывается ошибка несуществования, то default возвращает свой второй аргумент. Второй аргумент обычно является значением по умолчанию, но он может быть функцией, которая возвращает значение.

Пример: Предположим, мы хотим получить заголовки и авторов из таблицы posts. В случае, если поле «автор» отсутствует или null, мы хотим получить строку Anonymous.

r.table("posts").map(post ->
    r.hashMap("title", post.g("title"))
        .with("author", post.g("author").default_("Anonymous"))
).run(conn);

Подробнее об этой команде →

expr

r.expr(value) → value

Создаёт объект ReQL JSON из нативного объекта.

Пример: Объекты, обернутые с помощью expr, могут быть затем обработаны функциями API ReQL.

import com.rethinkdb.model.MapObject;

// Create object { "a": "b" }
MapObject newData = r.hashMap("a", "b");

// merge with { "b": [1, 2, 3] }
r.expr(newData).merge(r.hashMap("b", r.array(1, 2, 3))).run(conn);

Подробнее об этой команде →

js

r.js(jsString) → value

Создаёт выражение JavaScript.

Пример: Объединение двух строк с помощью JavaScript.

r.js("'str1' + 'str2'").run(conn);

Подробнее об этой команде →

coerceTo

sequence.coerceTo("array") → array
value.coerceTo("string") → string
string.coerceTo("number") → number
array.coerceTo("object") → object
sequence.coerceTo("object") → object
object.coerceTo("array") → array
binary.coerceTo("string") → string
string.coerceTo("binary") → binary

Преобразование значения одного типа в другой.

Пример: Преобразование потока в массив для хранения его вывода в поле. (Поток напрямую нельзя сохранить в поле.)

r.table("posts").map(post -> post.merge(
    r.hashMap("comments",
              r.table("comments").getAll(post.g("id")).optArg("index", "post_id")
              .coerceTo("array"))
)).run(conn);

Подробнее об этой команде →

typeOf

any.typeOf() → string

Получение типа возвращаемого значения запроса ReQL.

Пример: Получение типа строки.

r.expr("foo").typeOf().run(conn);
// result: "STRING"

Подробнее об этой команде →

info

any.info() → object
r.info(any) → object

Получение информации о значении ReQL.

Пример: Получение информации о таблице, такой как первичный ключ или размер кэша.

r.table("marvel").info().run(conn);

Подробнее об этой команде →

json

r.json(json_string) → value

Парсинг строки JSON на сервере.

Пример: Отправка массива на сервер.

r.json("[1,2,3]").run(conn);

Подробнее об этой команде →

toJsonString, toJson

value.toJsonString() → string
value.toJson() → string

Преобразование значения или объекта ReQL в строку JSON. Можно использовать либо toJsonString, либо toJson.

Пример: Получение документа ReQL в виде строки JSON.

r.table("hero").get(1).toJson().run(conn)

Возвращаемые данные:

'{"id": 1, "name": "Batman", "city": "Gotham", "powers": ["martial arts", "cinematic entrances"]}'

Подробнее об этой команде →

http

r.http(url[, options]) → value
r.http(url[, options]) → stream

Получение данных по указанному URL по протоколу HTTP. Тип возвращаемого значения зависит от опции resultFormat, которая по умолчанию проверяет Content-Type ответа.

Пример: Выполнение HTTP-запроса GET и сохранение результата в таблице.

r.table("posts").insert(r.http("http://httpbin.org/get")).run(conn);

Подробнее об этой команде →

uuid

r.uuid([string]) → string

Возвращает UUID (универсальный уникальный идентификатор), строку, которая может использоваться в качестве уникального идентификатора. Если строка передаётся в uuid в качестве аргумента, UUID будет детерминированным, полученным из хэша SHA-1 строки.

Пример: Генерация UUID.

r.uuid().run(conn);
// returns "27961a0e-f4e8-4eb3-bf95-c5203e1d87b9"

Подробнее об этой команде →

END_OF_DOCUMENT_MARKER

Геопространственные команды

circle

r.circle(r.array(longitude, latitude), radius) → geometry
r.circle(point, radius) → geometry

Создаёт окружность в виде линии или многоугольника. Окружность в RethinkDB представляет собой многоугольник или линию, приближённо представляющую окружность заданного радиуса вокруг заданного центра, состоящую из заданного количества вершин (по умолчанию 32).

Пример: Определение окружности.

r.table("geo").insert(
    r.hashMap("id", 300)
     .with("name", "Hayes Valley")
     .with("neighborhood", r.circle(r.array(-122.423246, 37.779388), 1000))
).run(conn);

Подробнее о данной команде →

distance

geometry.distance(geometry) → number
r.distance(geometry, geometry) → number

Вычисляет расстояние между точкой и другим геометрическим объектом. По крайней мере, один из указанных геометрических объектов должен быть точкой.

Пример: Вычисление расстояния между двумя точками на Земле в километрах.

r.distance(
    r.point(-122.423246,37.779388),
    r.point(-117.220406,32.719464)
).optArg("unit", "km").run(conn);

// Result:
734.1252496021841

Подробнее о данной команде →

fill

line.fill() → polygon

Преобразует объект типа Линия в объект типа Многоугольник. Если последняя точка не совпадает по координатам с первой точкой, polygon закроет многоугольник, соединив их.

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

r.table("geo").insert(
    r.hashMap("id", 201)
     .with("rectangle", r.line(
        r.array(-122.423246,37.779388),
        r.array(-122.423246,37.329898),
        r.array(-121.886420,37.329898),
        r.array(-121.886420,37.779388)))
).run(conn);

r.table("geo").get(201).update(
    r.hashMap("rectangle", row -> row.g("rectangle").fill())
).optArg("non_atomic", true).run(conn);

Подробнее о данной команде →

geojson

r.geojson(geojson) → geometry

Преобразует объект GeoJSON в геометрический объект ReQL.

Пример: Преобразование объекта GeoJSON в геометрический объект ReQL.

import com.rethinkdb.model.Geojson;

// GeoJSON object:
//      {
//          "type": "Point",
//          "coordinates": [ -122.423246, 37.779388 ]
//      }
Geojson geo = r.hashMap("type, "Point")
               .with("coordinates", r.array(-122.423246, 37.779388));

r.table("geo").insert(
    r.hashMap("id", "sfo")
     .with("name", "San Francisco")
     .with("location", r.geojson(geo))
).run(conn);

Подробнее о данной команде →

toGeojson

geometry.toGeojson() → object

Преобразует геометрический объект ReQL в объект GeoJSON.

Пример: Преобразование геометрического объекта ReQL в объект GeoJSON.

r.table("geo").get("sfo")("location").toGeojson().run(conn);

// Result:
{
    "type": "Point",
    "coordinates": [ -122.423246, 37.779388 ]
}

Подробнее о данной команде →

getIntersecting

table.getIntersecting(geometry).optArg("index", index) → selection<stream>

Получает все документы, где заданный геометрический объект пересекается с геометрическим объектом запрошенного геопространственного индекса.

Пример: Какие из локаций в списке парков пересекают circle1?

import com.rethinkdb.gen.ast.Circle;

Circle circle1 = r.circle(r.array(-117.220406, 32.719464), 10)
                  .optArg("unit", "mi");

r.table("parks").getIntersecting(circle1).optArg("index", "area").run(conn);

Подробнее о данной команде →

getNearest

table.getNearest(point).optArg("index", index) → array

Возвращает список документов, ближайших к заданной точке, на основе геопространственного индекса, отсортированных по возрастанию расстояния.

Пример: Возвращает список 25 ближайших укрытий врага к секретной базе.

import com.rethinkdb.gen.ast.Point;

Point secretBase = r.point(-122.422876,37.777128);

r.table("hideouts")
 .getNearest(secretBase)
 .optArg("index", "location")
 .optArg("max_results", 25)
 .run(conn);

Подробнее о данной команде →

includes

sequence.includes(geometry) → sequence
geometry.includes(geometry) → bool

Проверяет, полностью ли один геометрический объект содержится в другом. При применении к последовательности геометрических объектов, includes действует как фильтр, возвращая последовательность объектов из последовательности, которые содержат аргумент.

Пример: Содержится ли точка внутри окружности радиусом 2000 метров?

Object point1 = r.point(-117.220406,32.719464);
Object point2 = r.point(-117.206201,32.725186);

r.circle(point1, 2000).includes(point2).run(conn);

// Result:
true

Подробнее о данной команде →

intersects

sequence.intersects(geometry) → sequence
geometry.intersects(geometry) → bool
r.intersects(sequence, geometry) → sequence
r.intersects(geometry, geometry) → bool

Проверяет, пересекаются ли два геометрических объекта. При применении к последовательности геометрических объектов, intersects действует как фильтр, возвращая последовательность объектов из последовательности, которые пересекаются с аргументом.

Пример: Находится ли point2 внутри круга радиусом 2000 метров вокруг point1?

import com.rethinkdb.gen.ast.Point;

Point point1 = r.point(-117.220406,32.719464);
Point point2 = r.point(-117.206201,32.725186);

r.circle(point1, 2000).intersects(point2).run(conn);

// Result:
true

Подробнее о данной команде →

line

r.line([lon1, lat1], [lon2, lat2], ...) → line
r.line(point1, point2, ...) → line

Создаёт геометрический объект типа Линия. Линия может быть задана двумя способами:

  • Два или более массивов по два элемента, задающих широту и долготу вершин линии;
  • Два или более объекта типа Точка, задающих вершины линии.

Пример: Определение линии.

r.table("geo").insert(
    r.hashMap("id", 101)
     .with("route", r.line(r.array(-122.423246, 37.779388),
                           r.array(-121.88642, 37.329898)))
).run(conn);

Подробнее о данной команде →

point

r.point(longitude, latitude) → point

Создаёт геометрический объект типа Точка. Точка задаётся двумя числами с плавающей точкой: долготой (−180 до 180) и широтой (−90 до 90) точки на идеальной сфере. См. Геопространственная поддержка для получения дополнительной информации о системе координат ReQL.

Пример: Определение точки.

r.table("geo").insert(
    r.hashMap("id", 1)
     .with("name", "San Francisco")
     .with("location", r.point(-122.423246, 37.779388))
).run(conn);

Подробнее о данной команде →

polygon

r.polygon([lon1, lat1], [lon2, lat2], [lon3, lat3], ...) → polygon
r.polygon(point1, point2, point3, ...) → polygon

Создаёт геометрический объект типа Многоугольник. Многоугольник может быть задан двумя способами:

  • Три или более массивов по два элемента, задающих широту и долготу вершин многоугольника;
  • Три или более объекта типа Точка, задающих вершины многоугольника.

Пример: Определение многоугольника.

r.table("geo").insert(
    r.hashMap("id", 101)
     .with("rectangle", r.polygon(
        r.array(-122.423246, 37.779388),
        r.array(-122.423246, 37.329898),
        r.array(-121.88642, 37.329898),
        r.array(-121.88642, 37.779388))
    )
).run(conn);

Подробнее о данной команде →

polygonSub

polygon1.polygonSub(polygon2) → polygon

Используйте polygon2, чтобы «вырезать» отверстие в polygon1. polygon2 должно быть полностью внутри polygon1 и не иметь собственных отверстий (оно не должно быть результатом polygonSub).

Пример: Определение многоугольника с вырезанным отверстием.

import com.rethinkdb.gen.ast.Polygon;

Polygon outerPolygon = r.polygon(
    [-122.4,37.7],
    [-122.4,37.3],
    [-121.8,37.3],
    [-121.8,37.7]
);
Polygon innerPolygon = r.polygon(
    [-122.3,37.4],
    [-122.3,37.6],
    [-122.0,37.6],
    [-122.0,37.4]
);
outerPolygon.polygonSub(inner_polygon).run(conn);

Подробнее о данной команде →

Администрирование

grant

r.grant("username", r.hashMap("permission", bool[, ...])) → object
db.grant("username", r.hashMap("permission", bool[, ...])) → object
table.grant("username", r.hashMap("permission", bool[, ...])) → object

Предоставляет или отменяет права доступа для учётной записи пользователя, глобально или по базам данных или таблицам.

Пример: Предоставление учётной записи пользователя chatapp прав чтения и записи в базе данных users.

r.db("users").grant("chatapp", r.hashMap("read", true).with("write", true)).run(conn);

Возвращает:

{
    "granted": 1,
    "permissions_changes": [
        {
            "new_val": { "read": true, "write": true },
            "old_val": { null }
        }
    ]

Подробнее о данной команде →

config

table.config() → selection<object>
database.config() → selection<object>

Запрос (чтение и/или обновление) конфигураций для отдельных таблиц или баз данных.

Пример: Получение конфигурации для таблицы users.

r.table("users").config().run(conn);

Подробнее о данной команде →

rebalance

table.rebalance() → object
database.rebalance() → object

Перераспределяет фрагменты таблицы. При вызове на базе данных, все таблицы в этой базе данных будут перераспределены.

Пример: Перераспределение таблицы.

> r.table("superheroes").rebalance().run(conn);

Подробнее о данной команде →

reconfigure

table.reconfigure() → object
database.reconfigure() → object

Перенастраивает фрагментацию и репликацию таблицы. Используйте следующие опции с помощью optArg:

Пример: Перенастройка таблицы.

r.table("superheroes").reconfigure().optArg("shards", 2).optArg("replicas", 1).run(conn);

Подробнее о данной команде →

status

table.status() → selection<object>

Возвращает состояние таблицы.

Пример: Получение состояния таблицы.

r.table("superheroes").status().run(conn);

Подробнее о данной команде →

wait

table.wait() → object
database.wait() → object
r.wait(table | database) → object

Ожидает, пока таблица или все таблицы в базе данных будут готовы. Таблица может быть временно недоступна после создания, перебалансировки или перенастройки. Команда wait блокирует выполнение до тех пор, пока заданная таблица (или база данных) не будет полностью обновлена.

Пример: Ожидание готовности таблицы.

r.table("superheroes").wait().run(conn);

Результат:

{ "ready": 1 }

Подробнее о данной команде →

Улучшить эту документацию

Помогите нам улучшить этот документ.

  • Помогите нам улучшить документацию, отредактировав этот документ
  • Опубликуйте проблему на странице отслеживания проблем документации issue tracker на GitHub

Получить дополнительную помощь

Мы всегда рады предложениям по улучшению нашей документации или конкретным вопросам по ReQL.

  • Задайте вопрос на Stack Overflow
  • Пообщайтесь с нами и нашим сообществом на Slack
  • Поговорите с командой в #rethinkdb@freenode.net — через Webchat
  • Опубликуйте проблему в нашем issue tracker на GitHub
  • Следите за @rethinkdb в Twitter

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

Spec-Zone.ru

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