2012-05-14 83 views
0

嘗試從特定帳戶列表(使用帳戶ID)檢索事件列表,並按日期對這些事件進行排序。CouchDB:按帳戶ID列表篩選並按日期排序

這裏是我當前的地圖功能:

function(doc) { 
    if (doc.doc_type == 'event' && doc.account_id) { 
     emit([doc.date_start,doc.account_id],doc); 
    } 
} 

在蒲團所有帳戶運行時,此輸出正確的數據,但是,我對如何構建我的請求查詢或者我是否需要修改我不清楚映射函數來完成這個任務?重要的是,事件在指定的帳戶之一中,並且事件日期按順序(降序)排序。

回答

0

你有兩個選擇:

  • 做到爲每個帳戶查詢,客戶端上的結果合併:

    function(doc) { 
        if (doc.doc_type === 'event' && doc.account_id) { 
        emit([doc.account_id, doc.date_start], 1); 
        } 
    } 
    

    與查詢(正確的URL編碼?include_docs=true&startkey=["ACCOUNT_ID"]&endkey=["ACCOUNT_ID", {}]爲每個值爲account_id。合併過程快速簡單,因爲結果已按日期排序。

  • 做單查詢,客戶端上的結果進行排序:

    function(doc) { 
        if (doc.doc_type === 'event' && doc.account_id) { 
        emit(doc.account_id, 1); 
        } 
    } 
    

    查詢與?include_docs=true&keys=["ACCOUNT_ID1", "ACCOUNT_ID2", ...]。排序會比較慢,因爲結果按account_id排序。

只有測試會告訴你什麼是你的用例的最佳選擇。

+0

非常感謝Marcello!因爲它很容易,所以選擇1。 :) –