Оптимизация запроса на внутреннее соединение rethinkdb - PullRequest
0 голосов
/ 19 декабря 2018

Для данного пользователя я хочу получить все прогоны, которые

  • удовлетворяют некоторым условиям
  • получать только прогоны из проектов, к которым у пользователя есть доступ

В таблице «Пользователи» у каждого пользователя есть список идентификаторов проектов, а в таблице «Запуски» у каждого прогона - идентификатор проекта.Ниже приведен запрос, который работает.Можно ли оптимизировать его с помощью 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 голосов
/ 04 января 2019

ниже работал отлично для меня -

 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'])
...