2011-11-10 32 views
2

我有一個名爲「report_data_by_date」的觀點基本上是這樣的空行:CouchDB的視圖返回與日期排列比較複雜的組合鍵

function(doc) 
{ 
    if (doc.report_completed_timestamp) 
    { 
    emit(doc.report_completed_timestamp, doc); 
    } 
} 

發出這樣的事情:

{ 
     "id": "eade1035fb3dc87baba8bdf64b043c2c", 
     "key": [ 
      2011, 
      11, 
      9, 
      14, 
      1, 
      26, 
      305 
     ], 
     "value": { /*the doc*/} 
} 

當我查詢視圖,如下所示:

http://.../_design/ReportMetaData/_view/report_data_by_date 

我收回預期結果。

然而,當我試着用鑰匙查詢(只匹配特定日期),這樣的(但正確的URL編碼):

http://.../_design/ReportMetaData/_view/report_data_by_date?key=[2011,{},{},{},{},{},{}] 

我回來是這樣的:

{"total_rows":16,"offset":16,"rows":[]} 

其中rows是一個空數組。我期待回到2011年的排。

我覺得我錯過了一些很瑣碎的事情,但儘管我搜索我找不到答案。

感謝您的幫助!

回答

7

它沒有返回的原因是您的數據中可能沒有精確的關鍵字:[2011,{},{},{}],{},{},{}]。您的視圖的關鍵參數將只返回完全匹配。

如果你希望所有在2011年你可能想的鑰匙,使用startkey和和endkey。我沒有測試過您的確切查詢,但它可能看起來像這樣:

report_data_by_date?startkey = [2011] & endkey = [2011,{},{},{},{},{ }]

+0

感謝Ryan,出於某種原因,我只是在關鍵查詢中將通配符{}用作通配符。以startkey和endkey爲例,表明解決了我的問題。 – levigroker

1

我想什麼可以幫助你使用查詢參數startkey and endkey

我填充的測試數據庫具有以下兩個文件,

{"_id":"7bb98a75-99aa-481c-9de4-68b682f63068","_rev":"1-db9e34f664de295c76de4c8049b1de50","report_completed_timestamp":[2011,11,9,14,1,26,305]}, 
{"_id":"f4453fd3-dc3a-47b4-91a9-b28cc092513c","_rev":"1-4c9e78f384ef64700262c6ec148e8fff","report_completed_timestamp":[2012,1,1,0,0,0]} 

如果我檢索使用關鍵參數在你的榜樣你的看法,我會回來沒有結果,因爲沒有與文件具有該值的report_completed_timestamp字段。要獲得這些文件於2011年,使用以下命令:

http://.../ReportMetaData/_design/test/_view/report_data_by_date?startkey=[2011]&endkey=[2011,12,31,11,59,999] 

這得到你想要的結果:

{"total_rows":2,"offset":0,"rows":[ 
{"id":"7bb98a75-99aa-481c-9de4-68b682f63068","key":[2011,11,9,14,1,26,305],"value":{"_id":"7bb98a75-99aa-481c-9de4-68b682f63068","_rev":"1-db9e34f664de295c76de4c8049b1de50","report_completed_timestamp":[2011,11,9,14,1,26,305]}} 

]}

訪問Apache維基的更多信息:http://wiki.apache.org/couchdb/HTTP_view_API#Querying_Options

+0

感謝您的幫助。我想我的困惑是(明顯)無法利用基於密鑰的查詢中我認爲是通配符的東西。我沒有看到Querying Options wiki中的任何內容爲我闡明瞭這一點;在我應該閱讀的文檔中是否有特定的內容? – levigroker

+0

如果你有SQL背景,我可以閱讀O'Reilly第二十一章關於CouchDB for SQL Jockeys的第21章http://guide.couchdb.org/。通常很難說給定任務是否存在通配符選項。 – Chris