Оптимизация запроса на внутреннее соединение rethinkdb
Для данного пользователя я хочу получить все прогоны, которые
- удовлетворить некоторые условия
- получить только запускается из проектов, к которым у пользователя есть доступ
В таблице Users у каждого пользователя есть список идентификаторов проекта, а в таблице Run - у каждого прогона есть идентификатор проекта. Ниже приведен запрос, который работает. Можно ли оптимизировать его с помощью 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 ответ
Ниже работал очень хорошо для меня -
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'])