2010-11-08 25 views
3

文檔結構後日期排序:查詢多個特定按鍵

{ 
    "Type":"post" 
    "LastModified":"2010-11-01 21:55", 
    "CategoryID":3, 
    "ID":12 
} 

有不同類別一堆不同的博士後的是巨大的。但我似乎無法弄清楚如何創建一個視圖,該視圖返回按日期排序的文檔,例如,在類別3和5中選擇文檔。類別未知,限制查詢應該仍然工作。

我已經嘗試了不同的方法來看,但沒有接近達到預期的結果。

在SQL它很可能被什麼東西就像這樣:

SELECT * FROM document WHERE document.CategoryID in (3,5) ORDER BY document.LastModified DESC; 

我可以查詢視圖這樣的要求的次數,手動排序和分頁數據:

function(doc) { 
    emit(doc.CategoryID, doc.ID); 
} 

所以有人知道是否有可能避免這樣做,只讓couchdb更聰明一點?

+0

您是否嘗試過couchdb郵件列表?我認爲他們可能會建議將一組給定類別的所有記錄放入一個單獨的數據庫中,該數據庫的視圖由'LastModified' – rwilliams 2010-11-09 19:08:45

+0

耶,這太複雜了。我想我必須使用調用,其中一個使用[category,date]獲得posts鍵,然後使用POST選擇必要的類別到視圖,只需獲取doc.id,然後進行手動排序,然後另一個要求的實際文件。 – DivineGod 2010-11-09 22:15:31

回答

4

我能想到2種可能的解決方案。

  1. 散發出在地圖功能既CategoryIDLastModified。現在

    function(doc) { 
        emit([doc.CategoryID, doc.LastModified], null); 
    } 
    

    可以查詢視圖?startkey=[3]&endkey=[3, {}]讓所有CategoryID=3LastModified排序的文檔。要獲取多個CategoryID的文檔,您需要合併排序結果。

  2. 使用couchdb-lucene來構建索引。 couchdb-lucene可以處理複雜的查詢。

+0

我按照你的第一個建議來解決問題。 – DivineGod 2010-11-10 13:58:24