如何为文档编写RethinkDB查询,如果找到,则返回文档的合并版本,否则为null
?
以下天真的查询(用JavaScript编写)导致.merge
抛出异常,以防.get
返回null
(即找不到用户) :
r.table('users')
.get(username)
.merge((user) => {
return {
'projects': r.table('projects').getAll(username, {index: 'owner',})
.coerceTo('array'),
}
})
.run(conn)
答案 0 :(得分:3)
在处理未找到文档的情况下编写合并查询可以通过使用do
和branch
来完成,这样merge
只能在非{0}上调用 - 结果:
r.table('users')
.get(username)
.do((user) => {
// Only perform a merge if user isn't null
return r.branch(
user.eq(null),
null,
user.merge({
'projects': r.table('projects').getAll(username, {index: 'owner',})
.coerceTo('array'),
})
)
})
.run(conn)
答案 1 :(得分:0)
您可以在合并查询后添加.default(null)
以处理不存在的错误(尽管这也会处理合并查询中的任何其他不存在的错误)。