优化rethinkdb内部联接查询

时间:2018-12-18 21:38:47

标签: rethinkdb rethinkdb-python

对于给定的用户,我想获得所有运行的结果

  • 满足一些条件
  • 仅从用户有权访问的项目中运行

在“用户”表中,每个用户都有一个项目ID列表,而在“运行”表中,每个运行都有一个项目ID。以下是有效的查询。可以使用concatMap对其进行优化吗?

r.table('users')
.inner_join(
    r.table('runs').filter( lambda var_6: (<some_condns>), 
         lambda user, run: user['projects'].contains(run['project_id'])
    )
.filter(lambda l: l['left']['id'] == '<user_id>').without('left')

我认为equiJoin可能不起作用,因为我正在寻找与平等相关的列表中的项目。

1 个答案:

答案 0 :(得分:0)

以下内容对我来说效果很好-

 r.table("users").get_all(user_id).map(lambda user:
     {
        "run_array": r.table("runs").filter(lambda var_6: (<some_condns>))
               .filter(lambda run: 
                  user['projects'].contains(run["project_id"]))
                    .coerce_to("array")
     }).concat_map(lambda run: run['run_array'])