Couchdb 在Coach Db或cloudant中查找startdate和enddate之间的重叠日期范围
您好,我正在使用数据库作为couchDb构建一个预订应用程序。我有几个预订文件,每个文件都有房间号、开始日期和结束日期 现在,当用户使用roomId、开始日期和结束日期创建会议请求时,我需要在现有预订中搜索开始时间和结束时间之间的重叠时间范围,并仅在没有冲突时创建预订。除此之外,我还需要检查室友 该要求类似于 我在沙发db上创建了一个视图,它发出三个键:Couchdb 在Coach Db或cloudant中查找startdate和enddate之间的重叠日期范围,couchdb,views,cloudant,Couchdb,Views,Cloudant,您好,我正在使用数据库作为couchDb构建一个预订应用程序。我有几个预订文件,每个文件都有房间号、开始日期和结束日期 现在,当用户使用roomId、开始日期和结束日期创建会议请求时,我需要在现有预订中搜索开始时间和结束时间之间的重叠时间范围,并仅在没有冲突时创建预订。除此之外,我还需要检查室友 该要求类似于 我在沙发db上创建了一个视图,它发出三个键: function (doc) { if (doc.type == "reservation") { emit
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
任何帮助都将不胜感激。您可以使用并指定参考答案中概述的(StartA=StartB)
搜索条件
创建索引
向\u索引
端点发送POST
请求,将以下JSON数据结构作为有效负载传递
POST https://$USERNAME:$PASSWORD@$HOST/$DATABASE/_index HTTP/1.1
{
"index": {
"fields": [
{ "name":"startTime",
"type":"string"
},
{
"name":"endTime",
"type":"string"
},
{
"name":"roomid",
"type":"string"
}
]
},
"type": "text"
}
POST https://$USERNAME:$PASSWORD@$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"
}
}
}
查询索引
向\u find
端点发送POST
请求,将以下JSON数据结构作为有效负载传递
POST https://$USERNAME:$PASSWORD@$HOST/$DATABASE/_index HTTP/1.1
{
"index": {
"fields": [
{ "name":"startTime",
"type":"string"
},
{
"name":"endTime",
"type":"string"
},
{
"name":"roomid",
"type":"string"
}
]
},
"type": "text"
}
POST https://$USERNAME:$PASSWORD@$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"
}
}
}
根据需要替换时间戳和房间标识符值。如果查询返回至少一个文档,则您遇到了预订冲突。谢谢您向我指出这一点。如果我还需要其他东西,我会尝试一下这个,这也应该在couchdb 2.0+中提供。我想不出一个方法来达到相同的操作使用单一的地图减少,所以感谢芒果!