Загрузка произвольного JavaScript в Mongo через Java, который будет вызван позже - PullRequest
2 голосов
/ 10 ноября 2011

Просто встроить функции напрямую,

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?Это сделало бы вещи более гибкими и позволило бы уменьшить чистоту карты.

1 Ответ

0 голосов
/ 28 декабря 2011

Я столкнулся с подобной проблемой - однако в вашем случае вы можете рассмотреть возможность группировки функций в объекте / пространстве имен:

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, вы можете написать подпрограмму инициализации для ее начальной загрузки - однако это может быть дорогостоящим, поскольку контекст замыкания может быть потерян во время итераций отображения / сокращения, что потребует повторной инициализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...