繁体   English   中英

如何在MapReduce中使用变量?

[英]How can I use a variable inside MapReduce?

我在MapReduce中有以下脚本:

splitAndGroupServices = function(members) {
    var mapFn = function() {
       for(var j in this.services) {
         var service = this.services[j];
         if(service.member_id in members)
             emit(service.member_id, service);
       }
     }

     var reduceFn = ...; 
     var finalizeFn = ...;
     db.items.mapReduce(mapFn, reduceFn, {out: {inline:1}, finalize: finalizeFn});
}

当我打电话时:

db.loadServerScripts();
splitAndGroupServices({b1: 0, b2: 1});

我不断收到错误消息:

"errmsg" : "exception: ReferenceError: members is not defined near 'ber_id in members) {             emit(ser'  (line 4)",

如何将外部函数变量传递给内部函数变量? 在JS中实际上是可能的,但是Mongo不喜欢它。

mapReduce命令支持在mapperreducerfinalize阶段共享的“作用域”:

db.items.mapReduce(
    mapFn,
    reduceFn, 
   { 
       "scope": { "members": members },
       "out": { "inline": 1 },
       "finalize": finalizeFn
   }
)

这被视为该过程的“全局”,并且所有修改都进入下一阶段或在该阶段中类似可用。 这是在任何阶段函数中使用的“传递变量”的标准方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM