2012-05-17 98 views
0

我嘗試從CouchDB的顯示應用程序的日誌條目 - 每個日誌條目包含時間戳,日誌標籤和客戶端的遠程IP,我的地圖功能是:地圖複合鍵排序

{ 
"_id": "_design/log", 
"language": "javascript", 
    "views": { 
     "browse": { 
      "map": "function(doc){ if (doc.type=='log') {emit([doc.date,doc.tag,doc.ip], doc);}}" 
     } 
    } 
} 

現在,我怎樣才能得到日誌條目爲指定的IP(標籤)按日期排序?

已嘗試變體:/_design/log/_view/browse?startkey=["info","8.8.8.8「]沒有成功。

回答

0

您的開始鍵需要3個元素:日期,標記和IP。

您的不成功的查詢在開始鍵中只有2個元素。

這裏有一些關於組合鍵的文檔。在使用的例子中,他們對於年,月和日有不同的關鍵。你可以在這本書中找到實例:http://shop.oreilly.com/product/0636920018247.do

+0

我不輸入'date'鍵,因爲我需要ip的所有'info'條目8.8.8.8 – Jhon

+0

如果您重新排序map-reduce函數中的鍵以便date鍵是last而不是first ? – Teddy

+0

來自reduce的結果未排序,所以我沒有在日期順序中得到結果.emitting [tag,ip]可能提供了reduce中的一些排序變體。 – Jhon

-1

地圖功能:

function(doc) { 
    if (doc.type === 'log') { 
    emit([doc.tag, doc.ip, doc.date], 1); 
    } 
} 

查詢參數(正確的URL編碼)

?startkey=["info","8.8.8.8"]&endkey=["info","8.8.8.8",{}]&include_docs=true 

結果按日期排序,因爲標籤和IP是固定的。

+0

這是好的,但我怎樣才能獲得按日期排序的所有'信息'條目? - 另一種觀點? – Jhon

+0

也許吧。 CouchDB中的視圖就像關係數據庫中的索引:如果您需要按給定字段查詢/排序,您需要一個視圖,或者可以在客戶端上篩選/排序結果,或者可以使用[list function ](http://guide.couchdb.org/draft/transforming.html)。沒有單一的良好迴應,您需要評估每種解決方案的優缺點。 –