1

「セッション」の場合、次のような構造があります。

{
  "created_at": Tue Apr 22 2014 23:10:52 GMT+00:00 ,
  "id":  "960e9a45-9a06-43c5-be7f-9144ee3f67c8" ,
  "scheduled_time": Wed Apr 23 2014 02:00:00 GMT+00:00 ,
  "reservation": {
    "created_at": Mon Apr 21 2014 03:00:26 GMT+00:00 ,
    "student_id":  "8be76323-98ce-488e-9164-611663bc17ec"
  }
}

以下を使用して、reservation.student_id で簡単に結合を実行できます。

r.table('sessions').eqJoin(
  r.row('reservation')('student_id'), 
  r.table('users')
)

私の問題は、セッションが必ずしも予約されるとは限らないことです。その属性は、学生が実際にセッションを予約した場合にのみ追加されます。そのため、予約されていないセッションがテーブルに存在する場合、Rethink は教えてくれNo attribute 'reservation' in objectます。

IRC の誰かが次のことを推奨しました。

r.table('sessions').withFields("reservation").eqJoin(
    r.row("reservation")("student_id"), 
    r.table("users")
)

ただし、このクエリは、現在予約されているセッションのみを取得します。すべてのセッションを取得したいのですが、予約のあるセッションにも参加したいと思います。単一のクエリでこれを行う方法はありますか、または予約なしでセッションを取得するには、最初のクエリの後に 2 番目のクエリを実行する必要がありますか? データを別の方法でモデル化する必要がありますか?

4

1 に答える 1