복붙노트

[MONGODB] MongoDB의 변수를 사용하는 방법지도 기능을지도-감소

MONGODB

MongoDB의 변수를 사용하는 방법지도 기능을지도-감소

문서 감안할 때

{_id:110000, groupings:{A:'AV',B:'BV',C:'CV',D:'DV'},coin:{old:10,new:12}}

내 사양은 그룹으로 사용자는 런타임에 사용자가 앞까지 알려져 있지 않다에 관심이 있지만, 지정, 실행시에 매핑 및 통합에 대한 속성의 사양을 요구한다.

예를 들어, 사용자가 지정하는 것 [A, B]의 매핑 배출 발생할

emit( {A:this.groupings.A,B:this.groupings.B},this.coin )

또 다른 매핑 배출의 원인이됩니다 [A, C]를 지정하고 싶을 때

emit( {A:this.groupings.A,C:this.groupings.C},this.coin )

맵퍼 및 감속기 기능은 서버 측을 실행하고 클라이언트 변수에 대한 액세스 권한이없는 c를 B는 / 나는 매퍼 기능의 변수 맵 키를 사용하는 방법과 함께 올 수 없었다.

내가지도 기능의 실행의 범위에 의해 그룹 것들의 목록을 참조 할 수 있다면, 이것은 모두 아주 간단합니다. 그러나, 매핑 함수가 다른 범위에서이 점점 끝 c를 b를 / 나는이 작업을 수행하는 방법을 모르거나 심지어 가능합니다.

나는 드라이버를 통해 실행을 동적으로 빌드 자바 스크립트에 노력을 시작하기 전에, 사람이 더 나은 제안이 있습니까? 어쩌면 '그룹'기능은 더 나은이 시나리오를 처리 할 것인가?

해결법

  1. ==============================

    1.읽기 전용 데이터로지도-감소 명령에 "범위"매개 변수를 사용하여 기능을지도-감소, 글로벌 전달할 수 있습니다. 아주 잘 난 두려워, 문서화 아니에요.

    읽기 전용 데이터로지도-감소 명령에 "범위"매개 변수를 사용하여 기능을지도-감소, 글로벌 전달할 수 있습니다. 아주 잘 난 두려워, 문서화 아니에요.

  2. ==============================

    2.@ 데이브 그리피스에 의해 지적, 당신은 맵리 듀스 함수의 범위 매개 변수를 사용할 수 있습니다.

    @ 데이브 그리피스에 의해 지적, 당신은 맵리 듀스 함수의 범위 매개 변수를 사용할 수 있습니다.

    나는 다른 사람에 의해 지적 밖으로 같이 서류는 매우 설명되지 않는 경우가 있기 제대로 함수에 전달하는 방법을 알아 내기 위해 조금 고생. 마지막으로, 나는 맵리 듀스 3 PARAMS을 기대 것을 깨달았다 :

    결국, 나는 자바 스크립트에 다음 코드에 도착했다 :

    // I define a variable external to my map and to my reduce functions
    var KEYS = {STATS: "stats"};
    
    function m() {
        // I use my global variable inside the map function
        emit(KEYS.STATS, 1);
    }
    
    function r(key, values) {
        // I use a helper function
        return sumValues(values);
    }
    
    // Helper function in the global scope
    function sumValues(values) {
        var result = 0;
        values.forEach(function(value) {
            result += value;
        });
        return result;
    }
    
    db.something.mapReduce(
        m,
        r,
        {
             out: {inline: 1},
             // I use the scope param to pass in my variables and functions
             scope: {
                 KEYS: KEYS,
                 sumValues: sumValues // of course, you can pass function objects too
             }
        }
    );
    
  3. from https://stackoverflow.com/questions/7273379/how-to-use-variables-in-mongodb-map-reduce-map-function by cc-by-sa and MIT license