如何编写处理null结果的RethinkDB合并查询

时间:2016-05-24 07:00:30

标签: javascript rethinkdb

如何为文档编写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)

2 个答案:

答案 0 :(得分:3)

在处理未找到文档的情况下编写合并查询可以通过使用dobranch来完成,这样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)以处理不存在的错误(尽管这也会处理合并查询中的任何其他不存在的错误)。