我真的是MySQL的ReThinkDB的新手,我有一些使用ReThinkDB的任务。
现在,我想实现类似...
MySQL:
select *
from reservations
where
room_id = '7cc8e51d-e3fa-4d84-b7e6-9ebf8975754a' and
((reservation_start between `11-01-2018 00:00:00` and `11-30-2018 23:59:59`) OR
(reservation_end between `11-01-2018 00:00:00` and `11-30-2018 23:59:59`))
ReThinkDB:
这是使用filter()
的等效查询,这要感谢@Peter:
r.db("myDb").table("reservations").filter(function(doc){
return
doc("room_id").eq("7cc8e51d-e3fa-4d84-b7e6-9ebf8975754a")
.and(doc("reservation_start").gt("2018-12-01T00:00:00").and(doc("reservation_start").lt("2018-12-10T23:59:59"))
.or(doc("reservation_end").gt("2018-12-01T00:00:00").and(doc("reservation_end").lt("2018-12-10T23:59:59"))))
}
)
但是我不确定如何将两个日期范围检查转换为两次日期范围检查。
谢谢!
答案 0 :(得分:1)
取决于您存储日期的格式:
选项1:
r.db("myDB").table("reservations").filter(function (doc) {
return doc("reservation_date").during(
r.time(2018, 11, 10, 'Z'), r.time(2018, 11, 20, 'Z'));
})
选项2:
r.db("myDB").table("reservations").filter(function(doc){
return doc("reservation_date").gt("2018-11-10T18:15:31.000000Z")
.and(doc("reservation_date").lt("2018-11-20T18:15:31.000000Z"))})
提高性能的另一种方式:
在预订日期创建索引:
r.db("myDB").table("reservations").indexCreate("reservation_date")
然后使用以下查询:
r.db("myDB").table('reservations')
.between("2018-11-10T18:15:31.000000Z",
"2018-11-20T18:15:31.000000Z", {index: "reservation_date"})
答案 1 :(得分:0)
现在,我对您的问题有了更好的了解
首先将查询转换为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"}
)
//注意:现在,当您还需要房间ID时,这将变得很棘手:)