2013-09-06 2 views
2

인터넷에서 무수히 많은 질문을 받았지만 여기서 무슨 일이 일어나고 있는지 파악할 수 없으며 몇 시간 동안 벽에 머리를 두드 리고 있습니다.javascript/mongodb/mapreduce의 전역 변수

이 작동 :

in myscript.js : 

obj = 'hello'; 
var f = function() { 
    printjson('obj=' + obj); 
} 
f(); 

$는 몽고 myscript.js
OBJ = 안녕하세요

이 작동하지 않습니다 : 왜 그

date1 = "2013-09-03T00:00:00Z"; 
date2 = "2013-09-04T00:00:00Z"; 

var mapIntensities = function() { 
    emit(this.unit, this.intensity); 
}; 

var reduceIntensities = function(unit, intensities) { 
    return {date: date1, "unit": unit, "intensity": Array.sum(intensities)}; 
}; 


db.units.mapReduce(mapIntensities, reduceIntensities, {out: "aggregate_intensities", query: {"DATE": {$gte: ISODate(date1), $lt: ISODate(date2)}}}) 

입니까? 문제는 reduce() 함수에서 발생합니다 (date1을 하드 코드 된 값으로 바꾼다면)

mongodb가 mapreduce를 수행하는 방법과 관련이 있습니까? date1 자체를 줄지도 내에서 정의되지 않습니다 때문에,

답변

1

(작업 예에서 알 수 있듯이) 그것은 오직 여기에 사용됩니다

return {date: date1, "unit": unit, "intensity": Array.sum(intensities)}; 

을 그리고 당신은에 모든 입력 변수를 정의하지 않습니다 Map Reduce의 실제 호출.

Map Reduce는 mongo 콘솔 내에서 자체 JavaScript (spidermonkey 또는 v8) envo 내에서 실행되며 mongo 콘솔에서는 실행되지 않는다고 가정합니다. date1

에 보내 http://docs.mongodb.org/manual/reference/command/mapReduce/#dbcmd.mapReduce :

당신은 scope PARAM을 사용할 필요가