Команда ReQL: 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);
Мы можем переписать предыдущий запрос, используя также r.branch.
r.table("posts").map(post ->
r.branch(
post.hasFields("author"),
r.hashMap("title", post.g("title"))
.with("author", post.g("author")),
r.hashMap("title", post.g("title"))
.with("author", "Anonymous")
)
).run(conn);
Пример: Команда default также может использоваться для фильтрации документов. Предположим, мы хотим получить всех наших пользователей, которые не являются взрослыми или чей возраст неизвестен (т.е., поле age отсутствует или равно null). Мы можем сделать это с помощью этого запроса:
r.table("users").filter(
user -> user.g("age").lt(18).default_(true)
).run(conn);
Ещё один способ записи предыдущего запроса — установить возраст равным -1 при отсутствии поля.
r.table("users").filter(
user -> user.g("age").default_(-1).lt(18)
).run(conn);
Другой способ выполнить тот же запрос — использовать hasFields.
r.table("users").filter(
user -> user.hasFields("age").not().or(user.g("age").lt(18))
).run(conn);
Тело каждого фильтра заключено в неявный .default_(false). Вы можете перезаписать значение false с помощью default optArg для filter, поэтому предыдущий запрос также можно записать так.
r.table("users").filter(
user -> user.g("age").lt(18).default_(true)
).optArg("default", true).run(conn);
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/java/default/