2

これはインターネット上で数え切れないほど質問されていることは知っていますが、ここで何が起こっているのか理解できず、何時間も頭を壁にぶつけています.

これは機能します:

in myscript.js :

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

$ mongo myscript.js
obj=hello

これは機能しません:

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 をハードコードされた値に置き換えれば機能します)

mapreduce を行うmongodbの方法に固有のものですか? (実際の例が示唆するように)

4

1 に答える 1

1

Map Reduce 自体の中で定義されることはないためdate1 、ここでのみ使用されます。

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

そして、Map Reduce の実際の呼び出しに入力する変数をまったく定義しません。

Map Reduce は、MongoDB 内の自己完結型 JavaScript (spidermonkey または v8) envo 内で実行されます。mongo コンソールでは実行していると想定しています。

scopeパラメータを使用する必要があります: http://docs.mongodb.org/manual/reference/command/mapReduce/#dbcmd.mapReduceで送信しますdate1

于 2013-09-06T13:29:11.653 に答える