Couchdb 在Coach Db或cloudant中查找startdate和enddate之间的重叠日期范围

Couchdb 在Coach Db或cloudant中查找startdate和enddate之间的重叠日期范围,couchdb,views,cloudant,Couchdb,Views,Cloudant,您好,我正在使用数据库作为couchDb构建一个预订应用程序。我有几个预订文件,每个文件都有房间号、开始日期和结束日期 现在,当用户使用roomId、开始日期和结束日期创建会议请求时,我需要在现有预订中搜索开始时间和结束时间之间的重叠时间范围,并仅在没有冲突时创建预订。除此之外,我还需要检查室友 该要求类似于 我在沙发db上创建了一个视图,它发出三个键: function (doc) { if (doc.type == "reservation") { emit

您好,我正在使用数据库作为couchDb构建一个预订应用程序。我有几个预订文件,每个文件都有房间号、开始日期和结束日期

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

该要求类似于

我在沙发db上创建了一个视图,它发出三个键:

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+中提供。我想不出一个方法来达到相同的操作使用单一的地图减少,所以感谢芒果!