2013-03-13 2 views
3

사용자에 속한 요소 모델이 있습니다. 다음 해시를 계산하려고합니다. 얼마나 많은 사용자가 1, 2, 3 등의 요소 개수를 가졌습니까? 내가 취하는 접근법은 먼저 {사용자 -> num 요소}의 해시를 생성 한 다음이를 반전시킵니다 두 번째 map-reduce 사용.Mongoid에서 map_reduce 호출을 연결하는 올바른 방법은 무엇입니까?

는 여기에 지금까지이 작업은 다음과 같습니다

Element.map_reduce(%Q{ 
    emit(this.user_id, 1); 
}, %Q{ 
    function(key, values) { 
    return Array.sum(values); 
    } 
}).out(inline: true).map_reduce(%Q{ 
    if (this.value > 1) { 
    emit(this.value, this._id); 
    } 
}, %Q{ 
    function(element_count, user_ids) { 
    return user_ids.length; 
    } 
}).out(inline: true) 

이 나에게 "정의되지 않은 메서드`map_reduce '"오류를 제공합니다. 문서에서 대답을 찾을 수 없습니다. 어떤 도움이라도 좋을 것입니다.

+0

어떤 몽고이즘 버전을 사용하고 있습니까? –

+0

사용하고 있습니다 3.0.23 – Yevgeniy

답변

2
나는 계산 사용자가 대신 집계 맵리 듀스, 첫번째 그룹을 사용하여 다음 요소들에 의해 다시 그룹화 해시를 계산

: 그것은 할 수있는 필요한 경우

[ 
{"users_count"=>3, "elements_count"=>2}, 
{"users_count"=>4, "elements_count"=>3}, 
... 
] 

:

Element.collection.aggregate([ 
    { 
    "$group" => { 
     "_id" => "$user_id", "elements_count" => {"$sum" => 1} 
    } 
    }, 
    { 
    "$group" => { 
     "_id" => "$elements_count", "users_count" => {"$sum" => 1} 
    } 
    }, 
    { "$project" => { 
     "_id" => 0, 
     "users_count" => '$users', 
     "elements_count" => '$_id', 
    } 
    } 
]) 

를이 다음과 같은 배열을 반환 $sort 연산자로 정렬하십시오

+0

불행히도 모든 연산자가 프로젝트와 함께 사용할 수있는 것은 아니므로 일반적으로 작동하지 않습니다. – Xodarap

관련 문제