ReQL command: default
Command syntax
value.default(default_value | function) → any sequence.default(default_value | function) → any
Description
Provide a default value in case of non-existence errors. The default
command evaluates its first argument (the value it’s chained to). If that argument returns None
or a non-existence error is thrown in evaluation, then default
returns its second argument. The second argument is usually a default value, but it can be a function that returns a value.
Example: Retrieve the titles and authors of the table posts
. In the case where the author field is missing or None
, we want to retrieve the string Anonymous
.
r.table("posts").map(lambda post:
{
"title": post["title"],
"author": post["author"].default("Anonymous")
}
).run(conn)
We can rewrite the previous query with r.branch
too.
r.table("posts").map(lambda post:
r.branch(
post.has_fields("author"),
{
"title": post["title"],
"author": post["author"]
},
{
"title": post["title"],
"author": "Anonymous"
}
)
).run(conn)
Example: The default
command can also be used to filter documents. Retrieve all our users who are not grown-ups or whose age is unknown (i.e., the field age
is missing or equals None
).
r.table("users").filter(lambda user:
(user["age"] < 18).default(True)
).run(conn)
One more way to write the previous query is to set the age to be -1
when the field is missing.
r.table("users").filter(lambda user:
user["age"].default(-1) < 18
).run(conn)
This can be accomplished with has_fields rather than default
.
r.table("users").filter(lambda user:
user.has_fields("age").not_() | (user["age"] < 18)
).run(conn)
The body of every filter is wrapped in an implicit .default(False)
. You can overwrite the value False
with the default
option.
r.table("users").filter(
lambda user: (user["age"] < 18).default(True),
default=True
).run(conn)
Example: The function form of default
receives the error message as its argument.
r.table("posts").map(lambda post:
{
"title": post["title"],
"author": post["author"].default(lambda err: err)
}
).run(conn)
This particular example simply returns the error message, so it isn’t very useful. But it would be possible to change the default value based on the specific error message thrown.
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/python/default/