2013-04-23 87 views
1

我很努力實現一個map/reduce函數,它將兩個文檔連接起來並將結果與​​reduce進行求和。couchdb - Map Reduce - 如何在Reduce函數中加入不同的文檔和分組結果

第一個文檔類型是類別。每個類別都有一個ID,在屬性中我存儲了一個詳細類別,一個主類別和一個分類(「Bereich」)。

{ 
    "_id": "a124", 
    "_rev": "8-089da95f148b446bd3b33a3182de709f", 
    "detCat": "Life_Ausgehen", 
    "mainCat": "COL_LEBEN", 
    "mainBereich": "COL", 
    "type": "Cash", 
    "dtCAT": true 
} 

第二個文檔類型是一個事務。屬性顯示每個事務的所有細節,包括字段「newCat」,它是對類別ID的引用。

{ 
    "_id": "7568a6de86e5e7c6de0535d025069084", 
    "_rev": "2-501cd4eaf5f4dc56e906ea9f7ac05865", 
    "Value": 133.23, 
    "Sender": "Comtech", 
    "Booking Date": "11.02.2013", 
    "Detail": "Oki Drucker", 
    "newCat": "a124", 
    "dtTRA": true 
} 

現在,如果我要開發一個地圖/減少得到的結果形式:

例如爲:「主要類別名稱」,「在交易的所有值的總和」。

我想通過「_ID:」和?include_docs = true引用另一個文檔,但在這種情況下,我不能使用reduce函數。

我在這裏看過其他帖子,但找不到合適的例子。

如果有人有一個想法如何解決這個問題會很好。

回答

2

據我所知,多個分類文檔可能具有相同的mainCat值。這種稱爲視圖歸類的技術適用於在關係模型中使用單一連接的情況。在你的情況下,它不會幫助:雖然你使用兩個文檔方案,你真的有三個級別的結構:主類別< - 類別< - 交易。我認爲你應該考慮改變DB設計。

複製數據,通過在交易文檔中存儲mainCat值也會有所幫助。我建議爲交易使用有意義的ID,而不是生成一個。你可以考慮例如"COL_LEBEN-7568a6de86e5e"(連接mainCat與一些隨機值,其中-定界符從來不存在於mainCat)。然後,使用地圖函數中的簡單解析器,您可以發送交易["COL_LEBEN", "7568a6de86e5e"],發送類別["COL_LEBEN"],然後減少以獲得總和。

相關問題