Spec-Zone.ru › RethinkDB javascript

Команда ReQL: 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);

Мы можем переписать предыдущий запрос с использованием r.branch тоже.

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

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

r.table("users").filter(function (user) {
    return user("age").lt(18).default(true)
}).run(conn, callback);

Ещё один способ записи предыдущего запроса — установить возраст в -1 при отсутствии поля.

r.table("users").filter(function (user) {
    return user("age").default(-1).lt(18)
}).run(conn, callback);

Этого можно добиться с помощью hasFields вместо default.

r.table("users").filter(function (user) {
    return user.hasFields("age").not().or(user("age").lt(18))
}).run(conn, callback);

Тело каждого фильтра заключено в неявную .default(false). Вы можете переопределить значение false с помощью опции default.

r.table("users").filter(function (user) {
    return user("age").lt(18)
}, {default: true} ).run(conn, callback);

Пример: Функциональная форма default получает сообщение об ошибке в качестве аргумента.

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

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

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

Spec-Zone.ru

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