2012-03-18 36 views
0

我試圖從沙發數據庫中獲得一個關鍵值對。關鍵是玩家ID,價值在於輪到他們有多少遊戲。我有一個地圖方法,可以成功獲取玩家ID列表,遊戲ID是玩家ID是誰的遊戲ID的列表。我的縮減功能是一個簡單的長度調用。couchdb,禁用rereduce

function(keys, values){ 
    return values.length; 
} 

當我從蒲團運行它,它運行良好。我得到的輸出樣本: 5,11 6,3

然而,當我把它從合集(C#lib中CouchDB的),我得到的結果 空,14個

我的猜測是它的合併這些通過rereduce合併爲一個項目。有沒有辦法禁用rereduce?

謝謝。

- 尼克

回答

2

不,您不能禁用rereduce。然而,這裏的區別在於蒲團在調用視圖時添加了group = true,但Divan不是,這就解釋了不同的結果。

你應該更換你用「_count」這正確處理兩者的減少和再減少的情況下減少功能。你的函數返回values數組的長度,這隻適用於reduce情況。在javascript中的正確解決方案看起來像這樣;

function(keys, values, rereduce) { 
    if (rereduce) { 
    return sum(values); 
    } else { 
    return values.length 
    } 
} 

在減少呼叫,則這些值數組包含任何你作爲值發射,爲每一個條目發射。既然你在計數,你不在乎那個價值是什麼,只有其中有多少。在re-reduce調用中,values數組包含之前由reduce調用發出的值。這裏values數組的長度是完全不相關的,相反,你需要以前的reduce階段的長度之和。

+0

你是對的,這是一羣人。 – Nikhil 2012-03-19 03:08:52