直接嵌入函数很简单,
MapReduceOutput out = coll.mapReduce("function() { ... }",
"function( year, values ) { ... }",
null, MapReduceCommand.OutputType.INLINE, null);
但是如果我有这样一个 .js 文件
func = function(i) { ... }
m = function() { ...
func (7);
... }
r = function( year, values ) { ...
func (3);
... }
有没有办法做类似的事情
coll.LoadSomethingSomeHow(script);
MapReduceOutput out = coll.mapReduce("m", "r",
null, MapReduceCommand.OutputType.INLINE, null);
其中script
是从js文件加载的字符串?这将使事情变得更加灵活,并允许更清晰的 map 减少。
最佳答案
我经历了一次 similar issue - 但是在您的情况下,您可能会考虑在对象/ namespace 内对函数进行分组:
db.system.js.save({_id: 'mr', value: {func: function(i){…}, m: function(){…}, r: function(){…}}});
然后您可以将这些函数称为 mr.func
、mr.m
和 mr.r
。然而,这只是一种组织上的便利——@Umut 正确地指向 db.system.js
。如果你的库依赖于 prototype
,你可以编写一个初始化例程来引导它——但是这可能会很昂贵,因为闭包上下文可能会在 map/reduce 的迭代中丢失,需要重复初始化。
关于java - 通过Java加载任意javascript到Mongodb中,稍后调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8085060/