我正在寻找好的想法来组织围绕mongo的js代码,因为map reduce函数无法使用客户端作用域,所以必须将所有函数发送(或保存)到服务器(难以重用现有代码)。 我可以使用服务器存储的函数,但因为我们有一个db / client系统是一个太大的范围,似乎不可能使用db范围的函数。
其他想法是使用javascript预处理器,类似:
var mapFunction = function() {
// @include lib.js
Lib.foo(this.bar);
}
lib.js:
var Lib = {
foo : function(bar) {...}
}
并在mapReduce命令中运行生成的mapFunction。
在mongodb map / reduce javascript codebase中是否有任何良好的实践/想法可以实现良好的代码重用(没有系统存储函数)?
答案 0 :(得分:0)
Server-side functions 数据库作用域。但是,通常不鼓励使用与版本控制系统中的其他应用程序一起维护的代码。
如果您从应用程序发送map / reduce命令,则不需要预处理器..您可以调用插入相应代码的变量或函数。
您尚未提及某种特定语言,但这是借鉴MongoDB PHP documentation的示例:
// construct map and reduce functions
$map = new MongoCode("function() { emit(this.user_id,1); }");
$reduce = new MongoCode("function(k, vals) { ".
"var sum = 0;".
"for (var i in vals) {".
"sum += vals[i];".
"}".
"return sum; }");
$sales = $db->command(array(
"mapreduce" => "events",
"map" => $map,
"reduce" => $reduce,
"query" => array("type" => "sale"),
"out" => array("merge" => "eventCounts")));