2013-05-29 2 views
3

버전 2.4부터 MongoDB는 V8 엔진을 사용하므로 ECMA-262 제 5 판. 셸 내에 MapReduce 작업 을 실행할 때이 있으면 supported function의 목록이 추가로 있습니다.MongoDB에서 어떤 "종류"의 JavaScript를지도 내에서 사용할 수 있습니까?

만약 내가 네이티브 Node.js 드라이버을 사용하면 mapReduce 작업을 실행할 수 있습니까? mapreduce 안에 모든 모듈 또는 JavaScript 함수를 사용할 수 있습니까?

편집 : 지금 바로 테스트를 수행 할 수는 없지만 최대한 빨리 질문을 업데이트하겠습니다.

답변

2

MapReduce는 MongoDB 인스턴스 내에서 실행됩니다.

지금 다른 프로그래밍 언어 나 플랫폼을 사용하여 MapReduce를 만들 수 없습니다. , 응용 프로그램에 전달했다 당신은 내가 가정 개념을 시뮬레이션 할 수 있지만 모든 데이터를 의미 등

함수의 몸은 호출하여 MongoDB를 (그리고 파편 등)에 Node.js를 과정에서 전송되는

제공된 map 기능의 toString (here 참조).

if ('function' === typeof map) { 
    map = map.toString(); 
} 

당신은 map 기능에 기능을 포함 할 수 있지만 성능이 기능의 복잡도가 증가로 사용자의 요구를 충족 확인 할 것입니다. 하지만 여전히 전달한 함수로 제한되며 실행중인 Node.JS의 다른 스크립트에 액세스 할 수 없습니다.

편집 : 또한

, 추가 기능을 첨부합니다 mapReduce 호출의 scope 매개 변수를 사용할 수 있습니다. 예를 들어, 당신은 통과 scope로 :

{ add10: function(v) { return v + 10; } } 

기능이라고 add10합니다 (reducefinalize 기능도 등) map 전화에서 사용할 수있는 것 : 그 기술을 사용하여, 그래서

var fancyMath = add10(this.total); 

제한된 기능을 전달할 수 있습니다. BSON으로 직렬화되어 MongoDB 서버로 보내지기 때문에 자체적으로 (그리고 로컬에서 사용할 수없는 다른 JavaScript 함수를 참조하지 않아야합니다.) 필요합니다.

+0

좋습니다, 감사합니다. 'scope' 인자를 가진 Node 모듈을 전달하는 것은 어떻습니까? – gremo

+1

@Gremo 작동하지 않습니다. 모듈이 BSON으로 직렬화되고 다른 쪽 끝에서 직렬화되지 않습니다. – Sammaye

+0

@Gremo - 무엇을하려하십니까? 당신은 어쨌든 한 번에 하나의 문서에만 접근 할 수 있습니다 ... (나는 당신이 MapReduce에서 너무 많은 것을하려고하는 것에 대해 걱정합니다). – WiredPrairie