这“kind"可以在MongoDB的map和/或reduce函数中使用JavaScript

Which "kind" of JavaScript is available inside a map and/or reduce function in MongoDB?

本文关键字:reduce 函数 JavaScript map quot kind MongoDB      更新时间:2023-09-26

从2.4版本开始MongoDB使用V8引擎,因此ECMA-262第5版。当在shell中运行MapReduce作业时,有一个额外支持的功能列表。

如果我使用本地Node.js驱动程序来运行mapReduce作业会怎么样?我是否可以在mapreduce中使用任何模块或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调用中可用(以及reducefinalize函数):

var fancyMath = add10(this.total);

因此,使用该技术,您可以传递一些有限的功能。它被序列化为BSON并发送到MongoDB服务器,所以它需要是自包含的(而不是引用其他JavaScript函数,将不可用的本地)。