2015-11-17 18 views
0

我想我有rethinkdb了吧:)但現在我有點困惑 - 此查詢,統計分組的數據:RethinkDB:​​是否減少迭代所有分組數據?

groupedRql.count() 

我得到預期的結果(數字):

[{"group": "a", "reduction": 41}, {"group": "b", "reduction": 39}...] 

所有減少的結果是〜40預計(正確),但是當我使用計數減少這樣的:

groupedRql.map(function(row) { 
    return row.merge({ 
    count: 0 
    }) 
}).reduce(function(left, right) { 
    return {count: left("count").add(1)} 
}) 

我得到低得多的結果(〜10),其沒有任何意義:

[{"group": "a", "reduction": 10}, {"group": "b", "reduction": 9}...] 

我需要使用減少,當然,用於進一步操作。 我錯過了什麼嗎?

我在服務器上使用v2.0.3,查詢直接在dataexplorer上測試。

回答

1

問題躺在這裏

return {count: left("count").add(1)} 

應該

return {count: left("count").add(right("count"))} 

的減少多碎片,多個CPU核心之間運行相同常。當你做

return {count: left("count").add(1)} 

你忽略right一些計數。

它指出該文檔中:https://www.rethinkdb.com/docs/map-reduce/#how-gmr-queries-are-executed

它記住,精簡函數最重要的是不叫 其輸入流的元素從左至右。它在 上以任何順序或在先前調用函數的輸出上輸出流的元素。

+0

在這種情況下,'count'應該初始化爲1 – Kludge

+0

這也意味着'count'應該最終減1? – Kludge