javascript/mongodb/mapreduce中的全局变量

javascript/mongodb/mapreduce中的全局变量,javascript,mongodb,Javascript,Mongodb,我知道这在互联网上被问了无数次,但我不知道这里发生了什么,我已经用头撞墙好几个小时了 这项工作: in myscript.js : obj = 'hello'; var f = function() { printjson('obj=' + obj); } f(); $mongo myscript.js 你好 这不起作用: date1 = "2013-09-03T00:00:00Z"; date2 = "2013-09-04T00:00:00Z"; var mapIntensities

我知道这在互联网上被问了无数次,但我不知道这里发生了什么,我已经用头撞墙好几个小时了

这项工作:

in myscript.js :

obj = 'hello';
var f = function() {
  printjson('obj=' + obj);
}
f();
$mongo myscript.js
你好

这不起作用:

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的方式?(如工作示例所示)

因为地图Reduce本身中从未定义过
date1
,所以仅在此处使用:

return {date: date1, "unit": unit, "intensity": Array.sum(intensities)};
然后,您根本不需要定义一个变量来输入到Map Reduce的实际调用中

MapReduce在MongoDB中的自包含JavaScript(spidermonkey或v8)envo中运行,而不是在mongo控制台中运行,我假设您正在那里运行

您需要使用
scope
param:发送
date1