从2.4版本开始MongoDB使用V8引擎,因此ECMA-262第5版。当在shell中运行MapReduce作业时,有一个额外支持的功能列表。
如果我使用本地Node.js驱动程序来运行mapReduce作业会怎么样?我是否可以在map
和reduce
中使用任何模块或JavaScript函数?
编辑:我现在不能做一些测试来弄清楚,但我会尽快更新问题。
MapReduce在MongoDB实例中运行
你现在不能使用任何其他编程语言或平台来创建MapReduce。我想您可以模拟这个概念,但这将意味着所有数据都传输到您的应用程序,等等。
函数体从Node.JS进程转移到MongoDB(和分片等)通过调用toString
提供的map
函数(见这里)。
if ('function' === typeof map) {
map = map.toString();
}
您可以在map
函数中嵌入函数,但是随着函数复杂性的增加,您需要确认性能是否满足您的需求。但是,它仍然将被限制到您传递的函数,并且无法访问可能正在执行的Node.JS中的其他脚本。
另外,您可以使用mapReduce
调用的scope
参数来附加其他函数。例如,如果您将scope
传递为:
{ add10: function(v) { return v + 10; } }
称为add10
的函数将在map
调用中可用(以及reduce
和finalize
函数):
var fancyMath = add10(this.total);
因此,使用该技术,您可以传递一些有限的功能。它被序列化为BSON并发送到MongoDB服务器,所以它需要是自包含的(而不是引用其他JavaScript函数,将不可用的本地)。