在沙发上查找开始日期和结束日期之间的重叠日期范围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"
}
}
}
根据需要替换时间戳和房间标识符值。如果查询返回至少一个您遇到预订冲突的文档。
谢谢你指着我。如果我需要其他东西,我会尝试这一个,并伸出手。 – user1401443
这应该也可以在couchdb 2.0+中使用。我想不出采用单一地图进行同样操作的方法 - 减少,所以谢谢芒果! – sarwar