How to use variables in MongoDB Map-reduce map function How to use variables in MongoDB Map-reduce map function mongodb mongodb

How to use variables in MongoDB Map-reduce map function


As pointed out by @Dave Griffith, you can use the scope parameter of the mapReduce function.

I struggled a bit to figure out how to properly pass it to the function because, as pointed out by others, the documentation is not very detailed. Finally, I realised that mapReduce is expecting 3 params:

  • map function
  • reduce function
  • object with one or more of the params defined in the doc

Eventually, I arrived at the following code in Javascript:

// I define a variable external to my map and to my reduce functionsvar KEYS = {STATS: "stats"};function m() {    // I use my global variable inside the map function    emit(KEYS.STATS, 1);}function r(key, values) {    // I use a helper function    return sumValues(values);}// Helper function in the global scopefunction sumValues(values) {    var result = 0;    values.forEach(function(value) {        result += value;    });    return result;}db.something.mapReduce(    m,    r,    {         out: {inline: 1},         // I use the scope param to pass in my variables and functions         scope: {             KEYS: KEYS,             sumValues: sumValues // of course, you can pass function objects too         }    });


You can pass global, read-only data into map-reduce functions using the "scope" parameter on the map-reduce command. It's not very well documented, I'm afraid.