Spec-Zone.ru › RethinkDB javascript

Команда ReQL: do

Синтаксис команды

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

Описание

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

Последний аргумент для do (или, в некоторых формах, единственный аргумент) — это выражение или анонимная функция, которая получает значения из предыдущих аргументов или из команд, связанных перед do. Команда do по существу представляет собой map с одним элементом, позволяющим применить функцию к одному документу. Это позволяет привязать результат запроса к локальной переменной в области видимости do, позволяя вычислить результат один раз и повторно использовать его в сложном выражении или ряду команд ReQL.

Аргументы, передаваемые функции do, должны быть базовыми типами данных и не могут быть потоками или выборками. (Подробнее о типах данных ReQL.) Хотя все аргументы будут вычислены до выполнения функции, они могут быть вычислены в любом порядке, поэтому их значения не должны зависеть друг от друга. Тип результата do соответствует типу значения, возвращаемого функцией или последним выражением.

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

r.table('players').get('f19b5f16-ef14-468f-bd48-e194761df255').do(
    function (player) {
        return player('gross_score').sub(player('course_handicap'));
    }
).run(conn, callback);

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

r.do(r.table('players').get(id1), r.table('players').get(id2),
    function (player1, player2) {
        return r.branch(player1('gross_score').lt(player2('gross_score')),
            player1, player2);
    }
).run(conn, callback);

Обратите внимание, что branch, команда условного выполнения ReQL, должна использоваться вместо if. Подробнее см. в документации branch разветвления.

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

var newData = {
    id: 100,
    name: 'Agatha',
    gross_score: 57,
    course_handicap: 4
};
r.table('players').insert(newData).do(
    function (doc) {
        return r.branch(doc('inserted').ne(0),
            r.table('log').insert({time: r.now(), response: doc, result: 'ok'}),
            r.table('log').insert({time: r.now(), response: doc, result: 'error'}))
    }
).run(conn, callback);

Связанные команды

  • map

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

Spec-Zone.ru

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