在沙发上查找开始日期和结束日期之间的重叠日期范围Db或云彩

问题描述:

您好,我正在使用数据库构建预订应用程序作为couchDb。我有几个预订文件,每个都有roomId,开始日期和结束日期。在沙发上查找开始日期和结束日期之间的重叠日期范围Db或云彩

现在,当用户使用roomId,开始日期和结束日期创建会议请求时,我需要在现有预订中搜索开始时间和结束时间之间的重叠时间范围,并仅在没有冲突时才创建预定。除此之外,我还需要检查roomid。

该要求与Determine Whether Two Date Ranges Overlap相似。

我创造了我的沙发上分贝发射三把钥匙的观点:

function (doc) { 
    if (doc.type == "reservation") { 
     emit([doc.roomid, doc.startTime, doc.endTime], doc); 
    } 
} 

我也尝试像

?startkey=["1970-01-01T00:00:00Z", ""]&endkey=["\ufff0", "1971-01-01T00:00:00Z"] 

创造一些但我没有真正得到怎样复合查询的视图找到与roomid一起的日期范围。

任何帮助,将不胜感激。

您可以使用Cloudant Query并指定在参考答案中列出的(StartA <= EndB) and (EndA >= StartB)搜索条件。

创建索引

POST请求到_index端点通过下列JSON数据结构作为有效载荷。

POST https://$USERNAME:[email protected]$HOST/$DATABASE/_index HTTP/1.1 

{ 
    "index": { 
    "fields": [ 
    { "name":"startTime", 
     "type":"string" 
    }, 
    { 
     "name":"endTime", 
     "type":"string" 
    }, 
    { 
     "name":"roomid", 
     "type":"string" 
    } 
    ] 
    }, 
    "type": "text" 
} 

查询索引

POST请求到_find端点通过下列JSON数据结构作为有效载荷。

POST https://$USERNAME:[email protected]$HOST/$DATABASE/_find HTTP/1.1 

    { 
    "selector": { 
    "startTime": { 
     "$lte": "2017-03-06T15:00:00Z" 
    }, 
    "endTime": { 
     "$gte": "2017-03-06T14:00:00Z" 
    }, 
    "roomid": { 
     "$eq": "room 123" 
    } 
    } 
    } 

根据需要替换时间戳和房间标识符值。如果查询返回至少一个您遇到预订冲突的文档。

+0

谢谢你指着我。如果我需要其他东西,我会尝试这一个,并伸出手。 – user1401443

+0

这应该也可以在couchdb 2.0+中使用。我想不出采用单一地图进行同样操作的方法 - 减少,所以谢谢芒果! – sarwar