2016-11-19 80 views
3

我有一個包含多個數字列的查看錶。我想在一個查詢中計算他所有列的平均值。Rethinkdb在一個查詢中執行多個平均值

因此,如果表如下所示:

{ 
    foo : 2, 
    bar : 5, 
    foobar : 10 
}, 
{ 
    foo : 4, 
    bar : 3, 
    foobar : 12 
} 

的話,我想獲得每列的平均在一個查詢。我知道我可以這樣做:

r.table('stats').avg('foo') 

對每一列,但我想這樣做在一個查詢和映射到只有一個對象。

有關如何做到這一點的任何想法?

回答

2

您可以使用mapreduce(如果表中的每個記錄了所有3場):

r.table("stats").map(function(row){ 
    return {foo : row("foo"), bar : row("bar") , foobar : row("foobar"), count : 1}; 
}).reduce(function(left, right){ 
    return {foo : left("foo").add(right("foo")), bar : left("bar").add(right("bar")), foobar : left("foobar").add(right("foobar")), count : left("count").add(right("count"))}; 
}).do(function (res) { 
    return { 
    foo: res('foo').div(res("count")), 
    bar: res('bar').div(res("count")), 
    foobar: res('foobar').div(res("count")) 
    }; 
}) 

如果記錄可以有不是所有的字段,你可以在map操作分隔每個字段count,然後在do根據領域使用它。

+0

謝謝你,這個伎倆。 – John