我试图在mongodb映射/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的输出:
映射减少失败:{ "errmsg“:”异常: ReferenceError: v未定义“,”代码“:16722,"ok”:0} at src/mongo/shell/收藏品. is :970
这是一种预期的行为吗?在mapReduce中还有其他使用外部对象的方法吗?
发布于 2014-02-03 08:57:19
问题在于这个功能:
var HelperClass = function() {
var v = [1, 2, 3];
this.data = function() {
return v.data;
};
};因为:
return v.data;与实际变量(实际上是this.v.data )的作用域不同。
https://stackoverflow.com/questions/21522927
复制相似问题