2

私は次のようなイベントのコレクションを持っています

{
  _id: BSONID
  name: "event_name",
  values: {a: 10, b: 1000, c: 50}
}

mapReduceを使用しようとしています

map = function() {
  return emit([this.name, this.values['a']], this.values['b']);
}

reduce = function(key, values) {
  // stuff
}

collection.mapReduce(map, reduce, { out: { inline: 1 } }, callback);

ただし、マップする値を動的に変更できるようにしたいと思います。本質的に、私は持っていたいです

var key = 'a';
var value = 'b';

map = function ()
{
  return emit([this.name, this.values[key]], this.values[value]);
}

問題は、実行コンテキストがmongodbに渡されないことです。関数に文字列を使用することに依存しないソリューションはありますか?

4

1 に答える 1

2

はい、「スコープ」変数をMapReduceに渡すことができます。

scope = {key : "a", value : "b"};
collection.mapReduce(map, reduce, {scope : scope, out: { inline: 1 } }, callback);
于 2012-05-23T15:49:38.977 に答える