@Dave Griffithが指摘しているように、scope
を使用できます。 mapReduce
のパラメーター 機能。
他の人が指摘しているように、ドキュメントがあまり詳細ではないため、関数に適切に渡す方法を理解するのに少し苦労しました。最後に、mapReduce
に気づきました 3つのパラメータを期待しています:
- マップ関数
- 機能を減らす
- ドキュメントで定義された1つ以上のパラメータを持つオブジェクト
最終的に、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
}
}
);