mongodb mapreduce范围 - ReferenceError

时间:2014-02-03 08:46:13

标签: javascript mongodb scope mapreduce

我正在尝试在mongodb map / reduce函数中使用外部对象。如果对象具有应该访问的变量,则会发生错误。

例如:

var conn = new Mongo();
var db = conn.getDB("test");

var HelperClass = function() {
  var v = [1, 2, 3];

  this.data = function() {
    return v;
  };
};

var helper = new HelperClass();

var map = function() {
  helper.data().forEach(function(value) {
    emit(value, 1);
  });
};

var reduce = function(key, values) {
  var count = 0;
  values.forEach(function(entry) {
    count += entry;
  });
  return count;
};

db.test.mapReduce(map, reduce, {
  out: "temp",
  scope: {
    helper: helper
  }
});

mongodb的输出:

  

map reduce failed:{“errmsg”:“exception:ReferenceError:v不是   定义“,”代码“:16722,”ok“:0} at   SRC /蒙戈/壳/ collection.js:970

这是预期的行为吗?在mapReduce中有没有其他方法可以使用外部对象?

1 个答案:

答案 0 :(得分:1)

造成这个问题的原因是这个功能:

var HelperClass = function() {
  var v = [1, 2, 3];

  this.data = function() {
    return v.data;
  };
};

自:

return v.data;

与实际变量this.v.data的范围不同。