RethinkDb查询两个日期列之间的当前日期时间

时间:2018-11-16 15:16:22

标签: mysql sql rethinkdb

对不起,如果这真的是一个基本问题,那么我真的很想重新思考来自SQL的Db。

(1)

下面是我想转换为ReThinkDb的SQL查询。这可能真的很简单,但是我做错了。

等效于SQL:

select *  
from reservations
where
    room_id = 'b1a7ddd3-ddfd-4624-8e85-79b47fb19f99' and  
    now() between reservation_start and reservation_end

RethinkDb查询(错误):

r.db("myDb").table("reservations").filter(function(doc){ 
    return 
        doc("room_id").eq("b1a7ddd3-ddfd-4624-8e85-79b47fb19f99")
            .and( r.now().between(doc("reservation_start ").date(), doc("reservation_end").date()) )
    }
)

我只想返回今天预定的预定,如果已经开始但尚未完成(预定日期时间),则返回正在预定的预定。

(2)

预订中有一个列或字段供与会者使用,这是名称/电子邮件的列表/数组:

attendees: [
  {"name": "Attendee 1", "email": "attendee1@test.com"},
  {"name": "Attendee 2", "email": "attendee2@test.com"},
  {"name": "Attendee 3", "email": "attendee3@test.com"},
]

我想添加一个过滤器以检查email中是否存在list of attendees

这就像查询以下内容:电子邮件attendee2@test.com今天预订了room 101

如果无法或不使用参会者电子邮件进行查询...我不介意,因为我可以在我的应用程序中进行检查。重要的是now() between dateColumnStart and dateColumnEnd的rethinkdb查询等效项。

更新:添加了存储在数据库(RethinkDB)中的示例数据

{
"attendees": [
    {
        "email": dummyUser101@gmail.com, »
        "name":  "Dummy User 101"
    } ,
    {
        "email": dummyUser102@gmail.com, »
        "name":  "Dummy User 102"
    }
] ,
"id":  "45qum29cel0cm4ejl2obi6pttj" ,
"room_id":  "7cc8e51d-e3fa-4d84-b7e6-9ebf8975754a" ,
"reservation_end":  "2018-11-23T02:00:00" , //10AM (GMT8)
"reservation_start":  "2018-11-19T00:00:00" , //8AM (GMT8)
"details":  "Week event 8AM-10AM Test"
}

{
"attendees": [
    {
        "email": dummyUser103@gmail.com, »
        "name":  "Dummy User 103"
    } ,
    {
        "email": dummyUser101@gmail.com, »
        "name":  "Dummy User 101"
    } ,
    {
        "email": dummyUser102@gmail.com, »
        "name":  "Dummy User 102"
    }
] ,
"id":  "6ejq8h6tvlpnjiskvt4kthfmss_20181123T060000Z" ,
"room_id":  "7cc8e51d-e3fa-4d84-b7e6-9ebf8975754a" ,
"reservation_end":  "2018-11-23T07:00:00" , //3PM (GMT8)
"reservation_start":  "2018-11-23T06:00:00" , //2PM (GMT8)
"details":  "Test Reservation"
}

谢谢!

1 个答案:

答案 0 :(得分:1)

(1)

您不能在过滤器中使用。之间获取两个键之间的所有文档。在此处查看文档:{​​{3}}

您需要的是“期间”关键字。

r.db("myDB").table("reservations").filter(function(doc){ 
    return doc("room_id").eq("b1a7ddd3-ddfd-4624-8e85-79b47fb19f99")
        .and( r.now().during(
           r.ISO8601(doc("reservation_start"),{defaultTimezone:"+08:00"}),
           r.ISO8601(doc("reservation_end"),{defaultTimezone:"+08:00"})))
    }
)