Spec-Zone.ru › RethinkDB java

Команда ReQL: do_

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

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

Описание

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

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

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

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

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

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

r.do_(r.table("players").get(id1), r.table("players").get(id2),
    (player1, player2) -> r.branch(
        player1.g("gross_score").lt(player2.g("gross_score")),
        player1,
        player2
    )
).run(conn);

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

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

import com.rethinkdb.model.MapObject;

MapObject newData = r.hashMap("id", 100)
    .with("name", "Agatha")
    .with("gross_score", 57)
    .with("course_handicap", 4);

r.table("players").insert(newData).do_(doc ->
    r.branch(doc.g("inserted").ne(0),
        r.table("log").insert(
            r.hashMap("time", r.now())
               .with("response", doc)
               .with("result", "ok")),
        r.table("log").insert(
            r.hashMap("time", r.now())
               .with("response", doc)
               .with("result", "error"))
    )
).run(conn);

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

  • отображение

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

Spec-Zone.ru

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