Теперь я немного лучше понимаю вашу проблему
Сначала преобразуйте ваш запрос в java:
r.db("myDb").table("reservations").filter(doc ->
doc.g("room_id").eq("7cc8e51d-e3fa-4d84-b7e6-9ebf8975754a")
.and(doc.g("reservation_start").gt("2018-12-01T00:00:00").and(doc.g("reservation_start").lt("2018-12-10T23:59:59"))
.or(doc.g("reservation_end").gt("2018-12-01T00:00:00").and(doc.g("reservation_end").lt("2018-12-10T23:59:59")))))
Теперь оптимально. Возможно, вы захотите использовать room_id в качестве вторичного индекса:
r.db ("myDB"). Table ("резервирование"). IndexCreate ("room_id")
И тогда вы можете использовать в своем запросе как:
r.db("myDb").table("reservations")
.getAll("7cc8e51d-e3fa-4d84-b7e6-9ebf8975754a")
.optArg("index","room_id")
.filter(...)
"Но я не уверен, как преобразовать две проверки диапазона дат в кратные между собой."
1.) Создать индекс составного массива
r.db("myDb").table("reservations").indexCreate(
"reservation_date", [r.row("reservation_start"), r.row("reservation_end")]
2.) используйте запрос между
r.db("myDb").table("reservations").between(
["2018-12-01T00:00:00", "2018-12-01T00:00:00"], ["2018-12-10T23:59:59", "2018-12-10T23:59:59"], {index: "reservation_date"}
)
// примечание: теперь это становится сложным, когда вам также нужен идентификатор комнаты:)