2015-07-20 4 views
0

Я следующий сценарий в 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 это не нравится.

ответ

1

Команда mapReduce поддерживает «объем», который является общим для всей mapper, reducer и finalize этапов:

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

Это рассматривается как «глобальное» для процесса и любые модификации, переносятся в следующую стадию или аналогичным образом доступным на этом этапе. Это стандартный способ «передачи переменных» для использования в любой из функций сцены.

Смежные вопросы