Seperti yang ditunjukkan oleh @Dave Griffith, Anda dapat menggunakan scope
parameter mapReduce
fungsi.
Saya sedikit kesulitan untuk mencari cara untuk meneruskannya dengan benar ke fungsi karena, seperti yang ditunjukkan oleh orang lain, dokumentasinya tidak terlalu detail. Akhirnya, saya menyadari bahwa mapReduce
mengharapkan 3 params:
- fungsi peta
- mengurangi fungsi
- objek dengan satu atau beberapa parameter yang ditentukan dalam dokumen
Akhirnya, saya sampai pada kode berikut dalam Javascript:
// I define a variable external to my map and to my reduce functions
var 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 scope
function 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
}
}
);