1

我正在尝试创建一个动态地图函数 - 即使用任意字段进行聚合。我以为我可以为此使用闭包,但它不起作用 - 我收到一个错误,指出 blah 未定义。

我的测试代码 -

o.map = (function(){
        var blah = 'skill';
        var mapIt = function() {
            for (var idx = 0; idx < this[blah].length; idx++) {
                var key = this.skill[idx];
                var val = 1;
                emit(key, val);
            }
        }
        return mapIt
    })()

问候, 肖恩

4

2 回答 2

2

所以 map 函数实际上是通过函数toString(以源代码形式)通过线路发送到 mongodb 以在 mongodb 本身(而不是节点)内部执行。因此,这是行不通的。这就是scope选项的用途。您需要作为上下文/参数/范围提供给 map/reduce 作业的任何数据都需要在scope对象中进行设置。

于 2013-08-27T20:56:35.170 回答
0

看起来你必须手动设置范围 -

o.scope = {'blah': blah};

于 2013-08-27T20:57:13.177 回答