У меня есть такая структура для "сеанса":
{
"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")
)
Однако этот запрос будет получать ТОЛЬКО сеансы, которые в настоящее время имеют резервирование. Я хотел бы получить все сеансы, а также выполнить соединение для тех сеансов, для которых есть резервирование. Есть ли способ сделать это с помощью одного запроса, или мне просто нужно выполнить второй запрос после первого, чтобы захватить сеансы без оговорок? Нужно ли моделировать данные по-другому?