在Mongoose Map函数中未获取封闭值



我正在尝试创建一个动态映射函数,即使用任意字段进行聚合。我以为我可以使用闭包来实现这一点,但它不起作用-我收到一个错误,说没有定义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
    })()

谨致问候,Sean

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

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

o.scope={‘blah’:blah};