2016-08-25 12 views
1

どのようにクライアントのフィルタ内のエージェントIDを選択できますか?RethinkDB/ReQLのフィルタで別のクエリの結果を使用する

は、これは私が今持っているものであり、それは動作しますが、私はエージェントを選択するために最初に私たちが待っていること好きではないし、我々はクライアントを選択するには、データベースへの別の旅行を行います。

それは、すべての「その後」なしで、チェイニングで1回の旅行で行うことができるという方法があります。

const clients = await r.table('agents').getAll(teamId, {index: 'teamId'})('id').then(agentIds => 
    r.table('clients').filter(client => r.or(
    r.expr(agentIds).contains(client('agentId')), 
    r.table('tasks').filter(
     task => r.expr(agentIds).contains(task('agentId')) 
    )('clientId').contains(client('id')) 
)) 
); 

答えて

1

あなたは書くことができます。

r.table('agents').getAll(teamId, {index: 'teamId'})('id').coerceTo('array').do(agentIds => 
    ... 
) 

は、agentIdsを取得し、変数に格納してから何かを行い、単一のRethinkDBクエリを構築します。

+0

エージェントを最初に選択しないで、クライアントフィルタ機能内で行う方法がありますか? 。 r.table( 'クライアント')フィルタ(クライアント=> { //ここでそれを行う })。 –

+1

'filter'の中にクエリを置くこともできますが、' clients'テーブルのすべてのドキュメントに対して余分な読み込みを発行するので、おそらく遅くなります。 – mlucy

+0

私はRethinkDBがこれらの種類のネストされたクエリを最適化することを望んでいました –

関連する問題