2016-11-19 2 views
3

여러 개의 숫자 열이있는 검토 테이블이 있습니다. 한 번 쿼리로 모든 열의 평균을 계산하고 싶습니다. Rethinkdb가 하나의 쿼리에서 여러 개의 평균을 실행합니다.

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

그때 내가 한 쿼리에서 각 컬럼에 대한 평균을 좀하고 싶습니다 :

그래서 경우 테이블처럼 보인다. 각 열에

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

하지만 난 그냥 하나 개의 쿼리에서이 작업을 수행하고 하나의 객체로로 매핑하고 싶습니다 : 나는 내가 할 수있는 것을 알고있다.

방법에 대한 아이디어가 있으십니까? 기록이 모든 필드가 할 수있는 경우

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을 분리 할 수 ​​있습니다 :

답변

2

당신은 (테이블의 모든 레코드가 3 개 필드가있는 경우) reducemap을 사용할 수 있습니다 do에서 필드에 따라 사용하십시오.

+0

고마워요, 그 속임수를했습니다. – John