2013-05-11 2 views
0

Mongoid에서지도 축소 작업의 결과를 필터링하는 방법이 있습니까? MongoDB에서 실행할 수있는 '쿼리'기능을 찾았지만 Mongoid에서는 매핑이없는 것 같습니다.Mongoid에서지도 축소의 결과를 필터링하는 방법

나는 10보다 큰 그 값을 가지고있는 모든 사용자의 활동 수를 좀하고 싶습니다 :

Activity.map_reduce(%{ 
    emit(this.user_id, 1); 
    }, %{ 
    function(key, values) { 
     return Array.sum(values); 
    } 
    }).out(inline: true).query(:'value.gt' => 10) 
+0

쿼리를 실행하기 전에 쿼리가 문서를 필터링하고 축소가 실행됩니다. 원하는 것입니까? –

+0

아니요, 이후. 내가 후속 감소 결과를 걸러 내고 싶습니다 - – Yevgeniy

+0

위의 '쿼리'호출을 사용하여 설명하려했던 것처럼 집계 프레임 워크를 사용하지 않는 이유가 있습니다. 이는 간단하고 빠르며 맵 축소와 비교됩니다. 몽고 이드의 어떤 버전입니까? –

답변

1

Mongoid이 간단하게 (3.x의 기준) 집계 프레임 워크 지원 :

group = { "$group" => 
      { "_id" => "$user_id", "count" => { "$sum" => 1 } } 
} 

match = {"$match" => 
      { "count" => { "$gt" => 10} } 
} 

Activity.aggregate([group,match]) 
+0

고마워요! 사실, 그것을하지 않는 좋은 이유가있었습니다. 그래서, 나는하지 않았다. $ unwind 대신 $ project를 사용하도록 코드를 수정했습니다. – Yevgeniy

+0

확인. 내 코드에서 $ unwind를 보지 못했지만, 당신이 한 일은 당신의 유스 케이스에 대한 올바른 것임을 확신한다. 나는 단지 최소한의 작업 예제를 보여 주려했다. :) –

+0

이제 "suggested"편집을 볼 수있다. - 당신은 $ 프로젝트를 필요로하지 않습니다. - 집합 프레임 워크는 파이프 라인을 통해서만 필요한 필드를 가져올만큼 똑똑합니다. $ sort와 $ limit을 사용하는 한, "필요에 따라"추가 할 수 있습니다. –

관련 문제