Spec-Zone.ru › RethinkDB javascript

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

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

Доступ к ReQL

r

r → r

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

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

var r = require('rethinkdb');

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

connect

r.connect([options, ]callback)
r.connect([host, ]callback)
r.connect([options]) → promise
r.connect([host]) → promise

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

  • host: хост для подключения (по умолчанию localhost).
  • port: порт для подключения (по умолчанию 28015).
  • db: база данных по умолчанию (по умолчанию test).
  • user: учетная запись пользователя для подключения (по умолчанию admin).
  • password: пароль для учетной записи пользователя для подключения (по умолчанию '', пустой).
  • timeout: период ожидания в секундах для открытия подключения (по умолчанию 20).
  • ssl: хэш параметров для поддержки SSL-соединений (по умолчанию null). В настоящее время доступен только один параметр, и если указан параметр ssl, этот ключ обязателен:
    • ca: список Node.js Buffer объектов, содержащих сертификаты SSL CA.

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

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

r.connect({
    db: 'marvel'
}, function(err, conn) {
    // ...
});

Если обратный вызов не указан, будет возвращена promise.

var promise = r.connect({db: 'marvel'});

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

close

conn.close([{noreplyWait: true}, ]callback)
conn.close([{noreplyWait: true}]) → promise

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

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

conn.close(function(err) { if (err) throw err; })

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

reconnect

conn.reconnect([{noreplyWait: true}, ]callback)
conn.reconnect([{noreplyWait: true}]) → promise

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

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

conn.reconnect({noreplyWait: false}, function(error, connection) { ... })

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

use

conn.use(dbName)

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

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

conn.use('marvel')
r.table('heroes').run(conn, ...) // refers to r.db('marvel').table('heroes')

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

run

query.run(conn[, options], callback)
query.run(conn[, options]) → promise

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

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

r.table('marvel').run(conn, function(err, cursor) {
    cursor.each(console.log);
})

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

changes

stream.changes([options]) → stream
singleSelection.changes([options]) → stream

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

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

Начать мониторинг changefeed в одном клиенте:

r.table('games').changes().run(conn, function(err, cursor) {
  cursor.each(console.log);
});

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

> r.table('games').insert({id: 1}).run(conn, callback);
{old_val: null, new_val: {id: 1}}

> r.table('games').get(1).update({player1: 'Bob'}).run(conn, callback);
{old_val: {id: 1}, new_val: {id: 1, player1: 'Bob'}}

> r.table('games').get(1).replace({id: 1, player1: 'Bob', player2: 'Alice'}).run(conn, callback);
{old_val: {id: 1, player1: 'Bob'},
 new_val: {id: 1, player1: 'Bob', player2: 'Alice'}}

> r.table('games').get(1).delete().run(conn, callback)
{old_val: {id: 1, player1: 'Bob', player2: 'Alice'}, new_val: null}

> r.tableDrop('games').run(conn, callback);
ReqlRuntimeError: Changefeed aborted (table unavailable)

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

noreplyWait

conn.noreplyWait(callback)
conn.noreplyWait() → promise

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

Если обратный вызов не указан, будет возвращена promise.

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

conn.noreplyWait(function(err) { ... })

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

server

conn.server(callback)
conn.server() → promise

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

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

conn.server(callback);

// Result passed to callback
{
    "id": "404bef53-4b2c-433f-9184-bc3f7bda4a15",
    "name": "amadeus",
    "proxy": false
}

Если обратный вызов не указан, будет возвращена promise.

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

EventEmitter (подключение)

connection.addListener(event, listener)
connection.on(event, listener)
connection.once(event, listener)
connection.removeListener(event, listener)
connection.removeAllListeners([event])
connection.setMaxListeners(n)
connection.listeners(event)
connection.emit(event, [arg1], [arg2], [...])

Подключения реализуют тот же интерфейс, что и [EventEmitter][ee] Node.js. Это позволяет вам прослушивать изменения состояния подключения.

Пример: Мониторинг состояния подключения с помощью событий.

r.connect({}, function(err, conn) {
    if (err) throw err;

    conn.addListener('error', function(e) {
        processNetworkError(e);
    });

    conn.addListener('close', function() {
        cleanup();
    });

    runQueries(conn);
});

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

Курсоры

next

cursor.next(callback)
array.next(callback)
cursor.next() → promise
array.next() → promise

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

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

cursor.next(function(err, row) {
    if (err) throw err;
    processRow(row);
});

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

each

cursor.each(callback[, onFinishedCallback])
array.each(callback[, onFinishedCallback])
feed.each(callback)

Лениво перебирать результат по одному элементу за раз. Второй обратный вызов является необязательным и вызывается, когда итерация останавливается (когда больше нет строк или когда обратный вызов возвращает false).

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

cursor.each(function(err, row) {
    if (err) throw err;
    processRow(row);
});

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

eachAsync

sequence.eachAsync(function[, errorFunction]) → promise

Лениво перебирает курсор, массив или поток по одному элементу за раз. eachAsync всегда возвращает promise, который будет разрешен после возвращения всех строк.

Пример: Обработать все элементы в потоке, используя then и catch для обработки конца потока и любых ошибок. Обратите внимание, что итерация может быть остановлена в первом обратном вызове (rowProcess), вернув любое значение, отличное от Promise.

cursor.eachAsync(function (row) {
    var ok = processRowData(row);
    if (!ok) {
        throw new Error('Bad row: ' + row);
    }
}).then(function () {
    console.log('done processing');
}).catch(function (error) {
    console.log('Error:', error.message);
});

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

toArray

cursor.toArray(callback)
array.toArray(callback)
cursor.toArray() → promise
array.toArray() → promise

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

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

cursor.toArray(function(err, results) {
    if (err) throw err;
    processResults(results);
});

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

close

cursor.close([callback])
cursor.close() → promise

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

Пример: Закрыть курсор.

cursor.close(function (err) {
    if (err) {
        console.log("An error occurred on cursor close");
    }
});

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

EventEmitter (курсор)

cursor.addListener(event, listener)
cursor.on(event, listener)
cursor.once(event, listener)
cursor.removeListener(event, listener)
cursor.removeAllListeners([event])
cursor.setMaxListeners(n)
cursor.listeners(event)
cursor.emit(event, [arg1], [arg2], [...])

Курсоры и потоки реализуют тот же интерфейс, что и EventEmitter Node.js.

Пример: Передать все сообщения с помощью socket.io.

r.table("messages").orderBy({index: "date"}).run(conn, function(err, cursor) {
    if (err) {
        // Handle error
        return
    }

    cursor.on("error", function(error) {
        // Handle error
    })
    cursor.on("data", function(message) {
        socket.broadcast.emit("message", message)
    })
});

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

Управление базами данных

dbCreate

r.dbCreate(dbName) → object

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

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

> r.dbCreate('superheroes').run(conn, callback);
// Result passed to callback
{
    "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, callback);
// Result passed to callback
{
    "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, callback)

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

END_OF_DOCUMENT_MARKER

Обработка таблиц

tableCreate

db.tableCreate(tableName[, options]) → object
r.tableCreate(tableName[, options]) → object

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

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

> r.db('heroes').tableCreate('dc_universe').run(conn, callback);
// Result passed to callback
{
    "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, callback);
// Result passed to callback
{
    "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, callback)

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

indexCreate

table.indexCreate(indexName[, indexFunction][, {multi: false, geo: false}]) → object

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

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

r.table('comments').indexCreate('postId').run(conn, callback)

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

indexDrop

table.indexDrop(indexName) → object

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

Пример: Удалите вторичный индекс с именем ‘code_name’.

r.table('dc').indexDrop('code_name').run(conn, callback)

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

indexList

table.indexList() → array

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

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

r.table('marvel').indexList().run(conn, callback)

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

indexRename

table.indexRename(oldIndexName, newIndexName[, {overwrite: false}]) → object

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

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

r.table('comments').indexRename('postId', 'messageId').run(conn, callback)

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

indexStatus

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

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

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

r.table('test').indexStatus().run(conn, callback)

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

indexWait

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

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

Пример: Подождите, пока все индексы в таблице test будут готовы:

r.table('test').indexWait().run(conn, callback)

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

setWriteHook

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

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

Хук может быть анонимной функцией с сигнатурой (context: object, oldVal: object, newVal: object) -> object или двоичным представлением, полученным из поля function метода getWriteHook. Функция должна быть детерминированной, поэтому она не может использовать подзапрос или команду r.js.

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

getWriteHook

table.getWriteHook() → null/object

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

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

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

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

insert

table.insert(object | [object1, object2, ...][, {durability: "hard", returnChanges: false, conflict: "error"}]) → object

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

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

r.table("posts").insert({
    id: 1,
    title: "Lorem ipsum",
    content: "Dolor sit amet"
}).run(conn, callback)

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

update

table.update(object | function[, {durability: "hard", returnChanges: false, nonAtomic: false}]) → object
selection.update(object | function[, {durability: "hard", returnChanges: false, nonAtomic: false}]) → object
singleSelection.update(object | function[, {durability: "hard", returnChanges: false, nonAtomic: false}]) → object

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

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

r.table("posts").get(1).update({status: "published"}).run(conn, callback)

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

replace

table.replace(object | function[, {durability: "hard", returnChanges: false, nonAtomic: false}]) → object
selection.replace(object | function[, {durability: "hard", returnChanges: false, nonAtomic: false}]) → object
singleSelection.replace(object | function[, {durability: "hard", returnChanges: false, nonAtomic: false}]) → object

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

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

r.table("posts").get(1).replace({
    id: 1,
    title: "Lorem ipsum",
    content: "Aleas jacta est",
    status: "draft"
}).run(conn, callback)

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

delete

table.delete([{durability: "hard", returnChanges: false}]) → object
selection.delete([{durability: "hard", returnChanges: false}]) → object
singleSelection.delete([{durability: "hard", returnChanges: false}]) → object

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

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

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

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

sync

table.sync() → object

sync гарантирует, что записи в данной таблице записываются в постоянное хранилище. Запросы, которые указывают мягкую надёжность ({durability: 'soft'}), не дают таких гарантий, поэтому sync может использоваться для обеспечения состояния этих запросов. Вызов sync не возвращает значение, пока все предыдущие записи в таблице не будут сохранены.

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

r.table('marvel').sync().run(conn, callback)

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

END_OF_DOCUMENT_MARKER

Выбор данных

db

r.db(dbName) → db

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

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

r.db('heroes').table('marvel').run(conn, callback)

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

table

db.table(name[, {readMode: 'single', identifierFormat: 'name'}]) → table

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

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

r.table('marvel').run(conn, callback)

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

get

table.get(key) → singleRowSelection

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

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

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

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

getAll

table.getAll([key, key2...], [, {index:'id'}]) → selection

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

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

r.table('marvel').getAll('man_of_steel', {index:'code_name'}).run(conn, callback)

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

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 открыт).

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

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

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

filter

selection.filter(predicate_function[, {default: false}]) → selection
stream.filter(predicate_function[, {default: false}]) → stream
array.filter(predicate_function[, {default: false}]) → array

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

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

r.table('users').filter({age: 30}).run(conn, callback);

Предикат {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'), function(marvelRow, dcRow) {
    return marvelRow('strength').lt(dcRow('strength'))
}).zip().run(conn, callback)

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

outerJoin

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

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

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

r.table('marvel').outerJoin(r.table('dc'), function(marvelRow, dcRow) {
    return marvelRow('strength').lt(dcRow('strength'))
}).run(conn, callback)

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

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

eqJoin

sequence.eqJoin(leftField, rightTable[, {index: 'id', ordered: false}]) → sequence
sequence.eqJoin(function, rightTable[, {index: 'id', ordered: false}]) → sequence

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

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

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

r.table('players').eqJoin('gameId', r.table('games')).run(conn, callback)

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

[
    {
        "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, callback)

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

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

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([1, 2, 3, 4, 5]).map(function (val) {
    return val.mul(val);
}).run(conn, callback);
// Result passed to callback
[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, callback)
// 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(function(hero) {
    return hero('defeatedMonsters')
}).run(conn, callback)

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

orderBy

table.orderBy([key | function...], {index: index_name}) → table_slice
selection.orderBy(key | function[, ...]) → selection<array>
sequence.orderBy(key | function[, ...]) → array

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

Пример: Отсортировать все посты по индексу date.

r.table('posts').orderBy({index: 'date'}).run(conn, callback);

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

skip

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

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

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

r.table('marvel').orderBy('successMetric').skip(10).run(conn, callback)

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

limit

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

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

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

r.table('marvel').orderBy('belovedness').limit(10).run(conn, callback)

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

slice

selection.slice(startOffset[, endOffset, {leftBound:'closed', rightBound:'open'}]) → selection
stream.slice(startOffset[, endOffset, {leftBound:'closed', rightBound:'open'}]) → stream
array.slice(startOffset[, endOffset, {leftBound:'closed', rightBound:'open'}]) → array
binary.slice(startOffset[, endOffset, {leftBound:'closed', rightBound:'open'}]) → binary
string.slice(startOffset[, endOffset, {leftBound:'closed', rightBound:'open'}]) → string

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

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

r.table('players').orderBy({index: 'age'}).slice(3,6).run(conn, callback);

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

nth

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

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

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

r.expr([1,2,3]).nth(1).run(conn, callback)
r.expr([1,2,3])(1).run(conn, callback)

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

offsetsOf

sequence.offsetsOf(datum | predicate_function) → array

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

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

r.expr(['a','b','c']).offsetsOf('c').run(conn, callback)

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

isEmpty

sequence.isEmpty() → bool

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

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

r.table('marvel').isEmpty().run(conn, callback)

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

union

stream.union(sequence[, sequence, ...][, {interleave: true}]) → stream
array.union(sequence[, sequence, ...][, {interleave: true}]) → array
r.union(stream, sequence[, sequence, ...][, {interleave: true}]) → stream
r.union(array, sequence[, sequence, ...][, {interleave: true}]) → array

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

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

r.table('marvel').union(r.table('dc')).run(conn, callback);

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

sample

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

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

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

r.table('marvel').sample(3).run(conn, callback)

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

Агрегирование

group

sequence.group(field | function..., [{index: <indexname>, multi: false}]) → grouped_stream
r.group(sequence, field | function..., [{index: <indexname>, multi: false}]) → grouped_stream

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

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

> r.table('games').group('player').run(conn, callback)

// Result passed to callback
[
    {
        group: "Alice",
        reduction: [
            {id: 5, player: "Alice", points: 7, type: "free"},
            {id: 12, player: "Alice", points: 2, type: "free"}
        ]
    },
    {
        group: "Bob",
        reduction: [
            {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')('points')
   .ungroup().orderBy(r.desc('reduction')).run(conn, callback)

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

reduce

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

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

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

r.table("posts").map(function(doc) {
    return 1;
}).reduce(function(left, right) {
    return left.add(right);
}).default(0).run(conn, callback);

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

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

fold

sequence.fold(base, function) → value
sequence.fold(base, function, {emit: function[, finalEmit: function]}) → sequence

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

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

r.table('words').orderBy('id').fold('', function (acc, word) {
    return acc.add(r.branch(acc.eq(''), '', ', ')).add(word);
}).run(conn, callback);

(Этот пример можно реализовать с помощью 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, callback);

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

sum

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

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

Пример: Чему равно 3 + 5 + 7?

r.expr([3, 5, 7]).sum().run(conn, callback)

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

avg

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

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

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

r.expr([3, 5, 7]).avg().run(conn, callback)

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

min

sequence.min(field | function) → element
sequence.min({index: <indexname>}) → element
r.min(sequence, field | function) → element
r.min(sequence, {index: <indexname>}) → element

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

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

r.expr([3, 5, 7]).min().run(conn, callback);

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

max

sequence.max(field | function) → element
sequence.max({index: <indexname>}) → element
r.max(sequence, field | function) → element
r.max(sequence, {index: <indexname>}) → element

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

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

r.expr([3, 5, 7]).max().run(conn, callback);

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

distinct

sequence.distinct() → array
table.distinct([{index: <indexname>}]) → stream
r.distinct(sequence) → array
r.distinct(table, [{index: <indexname>}]) → stream

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

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

r.table('marvel').concatMap(function(hero) {
    return hero('villainList')
}).distinct().run(conn, callback)

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

contains

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

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

Пример: Ирон Мэн когда-либо сражался с Суперменом?

r.table('marvel').get('ironman')('opponents').contains('superman').run(conn, callback);

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

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

row

r.row → value

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

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

r.table('users').filter(r.row('age').gt(5)).run(conn, callback)

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

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, callback)

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

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, callback)

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

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, callback)

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

append

array.append(value) → array

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

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

r.table('marvel').get('IronMan')('equipment').append('newBoots').run(conn, callback)

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

prepend

array.prepend(value) → array

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

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

r.table('marvel').get('IronMan')('equipment').prepend('newBoots').run(conn, callback)

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

difference

array.difference(array) → array

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

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

r.table('marvel').get('IronMan')('equipment')
  .difference(['Boots'])
  .run(conn, callback)

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

setInsert

array.setInsert(value) → array

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

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

r.table('marvel').get('IronMan')('equipment').setInsert('newBoots').run(conn, callback)

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

setUnion

array.setUnion(array) → array

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

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

r.table('marvel').get('IronMan')('equipment').setUnion(['newBoots', 'arc_reactor']).run(conn, callback)

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

setIntersection

array.setIntersection(array) → array

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

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

r.table('marvel').get('IronMan')('equipment').setIntersection(['newBoots', 'arc_reactor']).run(conn, callback)

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

setDifference

array.setDifference(array) → array

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

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

r.table('marvel').get('IronMan')('equipment').setDifference(['newBoots', 'arc_reactor']).run(conn, callback)

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

() (bracket)

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

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

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

r.table('marvel').get('IronMan')('firstAppearance').run(conn, callback)

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

getField

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

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

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

r.table('marvel').get('IronMan').getField('firstAppearance').run(conn, callback)

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

hasFields

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

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

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

r.table('players').hasFields('games_won').run(conn, callback)

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

insertAt

array.insertAt(offset, value) → array

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

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

r.expr(["Iron Man", "Spider-Man"]).insertAt(1, "Hulk").run(conn, callback)

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

spliceAt

array.spliceAt(offset, array) → array

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

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

r.expr(["Iron Man", "Spider-Man"]).spliceAt(1, ["Hulk", "Thor"]).run(conn, callback)

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

deleteAt

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

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

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

> r(['a','b','c','d','e','f']).deleteAt(1).run(conn, callback)
// result passed to callback
['a', 'c', 'd', 'e', 'f']

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

changeAt

array.changeAt(offset, value) → array

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

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

r.expr(["Iron Man", "Bruce", "Spider-Man"]).changeAt(1, "Hulk").run(conn, callback)

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

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, callback);
// Result passed to callback
[ "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, callback);
// Result passed to callback
[ 1, "fred@example.com", "fred" ]

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

literal

r.literal(object) → special

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

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

r.table('users').get(1).update({ data: r.literal({ age: 19, job: 'Engineer' }) }).run(conn, callback)

// Result passed to callback
{
    "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]]).coerceTo('OBJECT').

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

r.object('id', 5, 'data', ['foo', 'bar']).run(conn, callback)

Результат:

{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(function(doc){
    return doc('name').match("^A")
}).run(conn, callback)

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

split

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

Разбивает строку на подстроки. Разбивает по пробелам, если вызывается без аргументов. При вызове с разделителем, разбивает по этому разделителю. При вызове с разделителем и максимальным числом разбиений, разбивает по разделителю не более max_splits раз. (Можно вызвать с null как разделителем, чтобы разбить по пробелам, при этом всё ещё указав max_splits.)

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

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

Результат:

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

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

upcase

string.upcase() → string

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

Пример:

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

Результат:

"SENTENCE ABOUT LATEX."

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

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

downcase

string.downcase() → string

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

Пример:

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

Результат:

"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, callback)
// result passed to callback
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, callback)

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

mul

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

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

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

r.expr(2).mul(2).run(conn, callback)

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

div

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

Делит два числа.

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

r.expr(2).div(2).run(conn, callback)

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

mod

number.mod(number) → number

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

r.expr(2).mod(2).run(conn, callback)

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

and

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

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

Пример: Возвращает, истинны ли оба a и b.

var a = true, b = false;
r.expr(a).and(b).run(conn, callback);
// result passed to callback
false

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

or

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

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

Пример: Возвращает, истинно ли хотя бы одно из a или b.

var a = true, b = false;
r.expr(a).or(b).run(conn, callback);
// result passed to callback
true

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

eq

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

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

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

r.table('users').get(1)('role').eq('administrator').run(conn, callback);

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

ne

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

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

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

r.table('users').get(1)('role').ne('administrator').run(conn, callback);

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

gt

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

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

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

r.table('players').get(1)('score').gt(10).run(conn, callback);

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

ge

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

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

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

r.table('players').get(1)('score').ge(10).run(conn, callback);

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

lt

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

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

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

r.table('players').get(1)('score').lt(10).run(conn, callback);

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

le

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

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

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

r.table('players').get(1)('score').le(10).run(conn, callback);

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

not

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

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

Пример: Не истинно — ложно.

r(true).not().run(conn, callback)
r.not(true).run(conn, callback)

Они равны 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], {float: true}) → number
r.random(integer[, integer]) → integer

Генерирует случайное число в заданных (или подразумеваемых) пределах. random принимает ноль, одно или два аргумента.

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

r.random().run(conn, callback)

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

round

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

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

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

r.round(12.345).run(conn, callback);
// Result passed to callback
12.0

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

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

ceil

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

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

Пример: Возвратить потолок 12.345.

r.ceil(12.345).run(conn, callback);
// Result passed to callback
13.0

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

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

floor

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

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

Пример: Возвратить пол 12.345.

r.floor(12.345).run(conn, callback);
// Result passed to callback
12.0

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

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

Даты и время

now

r.now() → time

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

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

r.table("users").insert({
    name: "John",
    subscription_date: r.now()
}).run(conn, callback)

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

time

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

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

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

r.table("user").get("John").update({birthdate: r.time(1986, 11, 3, 'Z')}).run(conn, callback)

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

epochTime

r.epochTime(number) → time

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

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

r.table("user").get("John").update({birthdate: r.epochTime(531360000)}).run(conn, callback)

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

ISO8601

r.ISO8601(string[, {defaultTimezone:''}]) → time

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

Пример: Обновление времени рождения Джона.

r.table("user").get("John").update({birth: r.ISO8601('1986-11-03T08:30:00-07:00')}).run(conn, callback)

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

inTimezone

time.inTimezone(timezone) → time

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

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

r.now().inTimezone('-08:00').hours().run(conn, callback)

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

timezone

time.timezone() → string

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

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

r.table("users").filter( function(user) {
    return user("subscriptionDate").timezone().eq("-07:00")
})

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

during

time.during(startTime, endTime[, {leftBound: "closed", rightBound: "open"}]) → bool

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

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

r.table("posts").filter(
    r.row('date').during(r.time(2013, 12, 1, "Z"), r.time(2013, 12, 10, "Z"))
).run(conn, callback)

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

date

time.date() → time

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

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

r.table("users").filter(function(user) {
    return user("birthdate").date().eq(r.now().date())
}).run(conn, callback)

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

timeOfDay

time.timeOfDay() → number

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

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

r.table("posts").filter(
    r.row("date").timeOfDay().le(12*60*60)
).run(conn, callback)

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

year

time.year() → number

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

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

r.table("users").filter(function(user) {
    return user("birthdate").year().eq(1986)
}).run(conn, callback)

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

month

time.month() → number

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

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

r.table("users").filter(
    r.row("birthdate").month().eq(11)
)

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

day

time.day() → number

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

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

r.table("users").filter(
    r.row("birthdate").day().eq(24)
).run(conn, callback)

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

dayOfWeek

time.dayOfWeek() → number

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

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

r.now().dayOfWeek().run(conn, callback)

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

dayOfYear

time.dayOfYear() → number

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

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

r.table("users").filter(
    r.row("birthdate").dayOfYear().eq(1)
)

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

hours

time.hours() → number

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

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

r.table("posts").filter(function(post) {
    return post("date").hours().lt(4)
})

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

minutes

time.minutes() → number

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

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

r.table("posts").filter(function(post) {
    return post("date").minutes().lt(10)
})

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

seconds

time.seconds() → number

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

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

r.table("posts").filter(function(post) {
    return post("date").seconds().lt(30)
})

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

toISO8601

time.toISO8601() → string

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

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

r.now().toISO8601().run(conn, callback)
// Result passed to callback
"2015-04-20T18:37:52.690+00:00"

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

toEpochTime

time.toEpochTime() → number

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

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

r.now().toEpochTime()

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

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

args

r.args(array) → special

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

Пример: Получить Алису и Боба из таблицы people.

r.table('people').getAll('Alice', 'Bob').run(conn, callback)
// or
r.table('people').getAll(r.args(['Alice', 'Bob'])).run(conn, callback)

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

binary

r.binary(data) → binary

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

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

var fs = require('fs');
fs.readFile('./defaultAvatar.png', function (err, avatarImage) {
    if (err) {
        // Handle error
    }
    else {
        r.table('users').get(100).update({
            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('f19b5f16-ef14-468f-bd48-e194761df255').do(
    function (player) {
        return player('gross_score').sub(player('course_handicap'));
    }
).run(conn, callback);

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

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 (т.е. “истинностные” значения), с окончательной командой «иначе», которая должна быть вычислена, если все условные выражения являются false или null.

Пример: Проверить значение x.

var x = 10;
r.branch(r.expr(x).gt(5), 'big', 'small').run(conn, callback);
// Result passed to callback
"big"

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

forEach

sequence.forEach(write_function) → object

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

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

r.table('marvel').forEach(function(hero) {
    return r.table('villains').get(hero('villainDefeated')).delete()
}).run(conn, callback)

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

range

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

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

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

> r.range(4).run(conn, callback)
// result returned to callback
[0, 1, 2, 3]

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

error

r.error(message) → error

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

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

r.table('marvel').get('IronMan').do(function(ironman) {
    return r.branch(ironman('victories').lt(ironman('battles')),
        r.error('impossible code path'),
        ironman)
}).run(conn, callback)

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

default

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

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

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

r.table("posts").map(function (post) {
    return {
        title: post("title"),
        author: post("author").default("Anonymous")
    }
}).run(conn, callback);

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

expr

r.expr(value) → value

Построить объект ReQL JSON из нативного объекта.

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

r.expr({a:'b'}).merge({b:[1,2,3]}).run(conn, callback)

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

js

r.js(jsString[, {timeout: <number>}]) → value

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

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

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

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

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(function (post) {
    return post.merge({ comments: r.table('comments').getAll(post('id'), {index: 'postId'}).coerceTo('array')});
}).run(conn, callback)

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

typeOf

any.typeOf() → string

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

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

r.expr("foo").typeOf().run(conn, callback);
// Result passed to callback
"STRING"

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

info

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

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

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

r.table('marvel').info().run(conn, callback)

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

json

r.json(json_string) → value

Обработать строку JSON на сервере.

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

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

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

toJsonString, toJSON

value.toJsonString() → string
value.toJSON() → string

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

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

> r.table('hero').get(1).toJSON()
// result returned to callback
'{"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 ответа. Убедитесь, что вы никогда не используете эту команду для URL, предоставленных пользователем.

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

r.table('posts').insert(r.http('http://httpbin.org/get')).run(conn, callback)

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

uuid

r.uuid([string]) → string

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

Пример: Сгенерировать UUID.

> r.uuid().run(conn, callback)
// result returned to callback
"27961a0e-f4e8-4eb3-bf95-c5203e1d87b9"

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

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

circle

r.circle([longitude, latitude], radius[, {numVertices: 32, geoSystem: 'WGS84', unit: 'm', fill: true}]) → geometry
r.circle(point, radius[, {numVertices: 32, geoSystem: 'WGS84', unit: 'm', fill: true}]) → geometry

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

Пример: Определение круга.

r.table('geo').insert({
    id: 300,
    name: 'Hayes Valley',
    neighborhood: r.circle([-122.423246,37.779388], 1000)
}).run(conn, callback);

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

distance

geometry.distance(geometry[, {geoSystem: 'WGS84', unit: 'm'}]) → number
r.distance(geometry, geometry[, {geoSystem: 'WGS84', unit: 'm'}]) → number

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

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

var point1 = r.point(-122.423246,37.779388);
var point2 = r.point(-117.220406,32.719464);
r.distance(point1, point2, {unit: 'km'}).run(conn, callback);
// result returned to callback
734.1252496021841

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

fill

line.fill() → polygon

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

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

r.table('geo').insert({
    id: 201,
    rectangle: r.line(
        [-122.423246,37.779388],
        [-122.423246,37.329898],
        [-121.886420,37.329898],
        [-121.886420,37.779388]
    )
}).run(conn, callback);

r.table('geo').get(201).update({
    rectangle: r.row('rectangle').fill()
}, {nonAtomic: true}).run(conn, callback);

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

geojson

r.geojson(geojson) → geometry

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

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

var geoJson = {
    'type': 'Point',
    'coordinates': [ -122.423246, 37.779388 ]
};
r.table('geo').insert({
    id: 'sfo',
    name: 'San Francisco',
    location: r.geojson(geoJson)
}).run(conn, callback);

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

toGeojson

geometry.toGeojson() → object

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

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

r.table('geo').get('sfo')('location').toGeojson.run(conn, callback);
// result passed to callback
{
    'type': 'Point',
    'coordinates': [ -122.423246, 37.779388 ]
}

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

getIntersecting

table.getIntersecting(geometry, {index: 'indexname'}) → selection<stream>

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

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

var circle1 = r.circle([-117.220406,32.719464], 10, {unit: 'mi'});
r.table('parks').getIntersecting(circle1, {index: 'area'}).run(conn, callback);

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

getNearest

table.getNearest(point, {index: 'indexname'[, maxResults: 100, maxDist: 100000, unit: 'm', geoSystem: 'WGS84']}) → array

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

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

var secretBase = r.point(-122.422876,37.777128);
r.table('hideouts').getNearest(secretBase,
    {index: 'location', maxResults: 25}
).run(conn, callback)

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

includes

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

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

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

var point1 = r.point(-117.220406,32.719464);
var point2 = r.point(-117.206201,32.725186);
r.circle(point1, 2000).includes(point2).run(conn, callback);
// result returned to callback
true

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

intersects

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

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

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

var point1 = r.point(-117.220406,32.719464);
var point2 = r.point(-117.206201,32.725186);
r.circle(point1, 2000).intersects(point2).run(conn, callback);
// result returned to callback
true

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

line

r.line([lon1, lat1], [lon2, lat2], ...) → line
r.line(point1, point2, ...) → line

Создаёт геометрический объект типа Line. Линию можно указать двумя способами:

  • Два или более двухэлементных массивов, указывающих широту и долготу вершин линии;
  • Два или более объектов Point, указывающих вершины линии.

Пример: Определение линии.

r.table('geo').insert({
    id: 101,
    route: r.line([-122.423246,37.779388], [-121.886420,37.329898])
}).run(conn, callback);

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

point

r.point(longitude, latitude) → point

Создаёт геометрический объект типа Point. Точка задаётся двумя числами с плавающей точкой, долготой (−180 до 180) и широтой (−90 до 90) точки на идеальной сфере. Дополнительная информация о системе координат ReQL приведена в разделе Геопространственная поддержка.

Пример: Определение точки.

r.table('geo').insert({
    id: 1,
    name: 'San Francisco',
    location: r.point(-122.423246,37.779388)
}).run(conn, callback);

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

polygon

r.polygon([lon1, lat1], [lon2, lat2], [lon3, lat3], ...) → polygon
r.polygon(point1, point2, point3, ...) → polygon

Создаёт геометрический объект типа Polygon. Многоугольник можно указать двумя способами:

  • Три или более двухэлементных массивов, указывающих широту и долготу вершин многоугольника;
  • Три или более объектов Point, указывающих вершины многоугольника.

Пример: Определение многоугольника.

r.table('geo').insert({
    id: 101,
    rectangle: r.polygon(
        [-122.423246,37.779388],
        [-122.423246,37.329898],
        [-121.886420,37.329898],
        [-121.886420,37.779388]
    )
}).run(conn, callback);

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

polygonSub

polygon1.polygonSub(polygon2) → polygon

Используйте polygon2 для создания отверстия в polygon1. polygon2 должен быть полностью включён в polygon1 и не должен иметь отверстий (не должен быть результатом работы polygonSub).

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

var outerPolygon = r.polygon(
    [-122.4,37.7],
    [-122.4,37.3],
    [-121.8,37.3],
    [-121.8,37.7]
);
var innerPolygon = r.polygon(
    [-122.3,37.4],
    [-122.3,37.6],
    [-122.0,37.6],
    [-122.0,37.4]
);
outerPolygon.polygonSub(innerPolygon).run(conn, callback);

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

Администрирование

grant

r.grant("username", {permission: bool[, ...]}) → object
db.grant("username", {permission: bool[, ...]}) → object
table.grant("username", {permission: bool[, ...]}) → object

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

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

r.db('users').grant('chatapp', {read: true, write: true}).run(conn, callback);

// Result passed to callback
{
    "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, callback);

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

rebalance

table.rebalance() → object
database.rebalance() → object

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

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

> r.table('superheroes').rebalance().run(conn, callback);

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

reconfigure

table.reconfigure({shards: <s>, replicas: <r>[, primaryReplicaTag: <t>, dryRun: false, nonvotingReplicaTags: null}]) → object
database.reconfigure({shards: <s>, replicas: <r>[, primaryReplicaTag: <t>, dryRun: false, nonvotingReplicaTags: null}]) → object
table.reconfigure(emergencyRepair: <option>, dryRun: false) → object

Переконфигурирует фрагментацию и репликацию таблицы.

Пример: Переконфигурирование таблицы.

> r.table('superheroes').reconfigure({shards: 2, replicas: 1}).run(conn, callback);

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

status

table.status() → selection<object>

Возвращает состояние таблицы.

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

> r.table('superheroes').status().run(conn, callback);

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

wait

table.wait([{waitFor: 'all_replicas_ready', timeout: <sec>}]) → object
database.wait([{waitFor: 'all_replicas_ready', timeout: <sec>}]) → object
r.wait(table | database, [{waitFor: 'all_replicas_ready', timeout: <sec>}]) → object

Ожидание готовности таблицы или всех таблиц в базе данных. Таблица может быть временно недоступна после создания, перебалансировки или переконфигурации. Команда wait блокирует выполнение, пока указанная таблица (или база данных) не будет полностью обновлена.

Пример: Ожидание готовности таблицы.

> r.table('superheroes').wait().run(conn, callback);
// Result passed to callback
{ "ready": 1 }

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

Улучшить эту документацию

Помогите нам улучшить этот документ.

  • Помогите нам улучшить документацию редактированием этого документа
  • Создайте вопрос на странице отслеживания проблем документации на GitHub

Получить дополнительную помощь

Мы всегда рады предложениям по улучшению нашей документации или конкретным вопросам по ReQL.

  • Задайте вопрос на Stack Overflow
  • Пообщайтесь с нами и нашим сообществом на Slack
  • Поговорите с командой на #rethinkdb@freenode.net — через Webchat
  • Создайте вопрос на нашей странице отслеживания проблем на GitHub
  • Подписывайтесь на @rethinkdb в Twitter

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

Spec-Zone.ru

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