RethinkDB条件连接

我有一个像这样的结构,用于“会话”:

{ "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上执行join:

 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") ) 

但是,此查询将仅检索当前有预留的会话。 我希望获得所有会话,同时也为那些有预订的会话进行join。 有没有办法做到这一点与单个查询,或者我只是需要执行第二个查询后第一个抢没有保留的会议? 我是否需要对数据进行不同的build模?

输出与eqJoin稍有不同,但这是否适合您?

 r.table('sessions').map(function(session) { return r.branch( session.hasFields("reservation"), { session: session, reservations: r.table("users").getAll(session("reservation")("student_id")).coerceTo("ARRAY") }, { session: session } })