2013-06-24 28 views
0

我有以下記錄結構(簡化爲僅包括重要比特):如何在Ektorp和couchDB中構建多部分查詢?

_id: couchDB generated ID 
_rev: couchDb generated revision number 
_creationDate: timestamp for when the record was created 
_amount: how much money was paid 
_type: how they paid (Visa, MC, etc.) 

我需要能夠來總結總數使用creationDate作爲起始和結束鍵各種付款方式。我想避免爲每種類型進行多個查詢,因爲可能有不明數量的付款類型。我首先必須查詢所有可用類型,然後針對每種特定類型執行一次查詢。

我的觀點的地圖:

function(doc) { 
     if(doc.type=="payment") { 
     emit([doc.type, doc.creationDate], doc.amount); 
     } 
    } 

我的觀點的減少功能:

_sum 

我的查詢:

ViewQuery query = new ViewQuery() 
     .designDocId(GLOBAL_DOC) 
     .viewName(TOTAL_CREDIT_CARD_PAYMENTS_FOR_TODAY) 
     .startKey(start) 
     .group(true) 
     .groupLevel(1) 
     .reduce(true); 

當我運行在蒲團它預期建立的一切查詢,給出按類型分組的所有類型的總數(並且由於沒有指定開始或結束而忽略了creationDate)。當我使用查詢運行它時,它看起來像開始和結束日期被忽略,因爲我得到的數據超出總計中包含的預期範圍。

另外,有沒有辦法通過被褥運行開始和結束鍵查詢?如果我知道如何跳過重新編譯/重新安裝的步驟,它會使開發速度更快。

編輯:什麼我試圖實現將是這個樣子的SQL版本:

SELECT sum(amount) 
    FROM payment 
    WHERE creationDate >= startDate AND creationDate <= endDate 
    GROUP BY type; 

是否有遵循以獲得從地圖這種行爲的標準模式/減少?

+0

我試過顛倒了鍵中字段的順序。這使得開始/結束工作,但阻止我按付款類型分組。 –

+0

我自己回答了補充問題。祕密是繞過蒲團,直接走到沙發:http:// localhost:5984/testdb/_design/sitedb/_view/my_view?group = true&group_level = 1。 –

回答

0

最後事實證明,它不能完成。我必須編寫一個視圖來獲取所有可用組的列表,然後在代碼中循環遍歷它,並調用另一個組來獲取每個組的總和。