2017-03-06 54 views
1

您好,我正在使用數據庫構建預訂應用程序作爲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一起的日期範圍。

任何幫助,將不勝感激。

回答

2

您可以使用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

相關問題