2016-01-15 39 views
1

我希望能夠查詢日期之間的couchdb,我知道這可以用startkeyendkey(它工作正常)完成,但是有可能做這樣的查詢,例如這樣:Couchdb - 日期範圍+多個查詢參數

SELECT * 
FROM TABLENAME 
WHERE 
DateTime >= '2011-04-12T00:00:00.000' AND 
DateTime <= '2012-05-25T03:53:04.000' 
AND 
    Status = 'Completed' 
AND 
Job_category = 'Installation' 

回答

2

一般來說,隨着字段數量的增加,在多個字段上建立索引的複雜性增加。

我的主要問題是:是否需要動態查詢StatusJob_category?如果沒有,你的觀點很簡單:

function (doc) { 
    if (doc.Status === 'Completed' && doc.Job_category === 'Installation') { 
    emit(doc.DateTime); // this line may change depending on how you break up and emit the datetimes 
    } 
} 

視圖是相當便宜,(取決於你的數據庫的大小),所以不要害怕建立幾個,涵蓋不同的情況。我希望像Status這樣的東西有可用選項的預定義列表,如對照Job_category,似乎它可能與用戶輸入更相關。

如果您需要這些字段是動態的,你可以將它們添加到索引,以及:

function (doc) { 
    emit([ doc.Status, doc.Job_category, doc.DateTime ]); 
} 

然後你可以使用數組作爲你的start_key。例如:

start_key=["Completed", "Installation", ...] 

tl; dr:使用「靜態」視圖,其中您有一個給定字段的預定義值列表。儘管可以用多個字段查詢「動態」視圖,但複雜性增長非常快。

+0

這就是我正在尋找的,thx很多爲你回答。 – macrog