【发布时间】:2012-07-04 15:11:57
【问题描述】:
前言:
为了获得干净有效的代码,我想在我的 mapreduce mongo 脚本中使用外部函数。
问题:
假设我们有以下地图函数(coffeescript 语法):
map: ->
key = foo(@field)
emit(key, value)
调用外部函数 'foo' 会引发错误
➜ rake mongo:mapreduce
MongoDB shell version: 2.0.5
connecting to: localhost:27017/connect_development
{
"assertion" : "map invoke failed: JS Error: ReferenceError: foo is not defined nofile_b:2",
"assertionCode" : 9014,
"errmsg" : "db assertion failure",
"ok" : 0
}
我们将为 reduce 上下文调用返回相同的内容。
臭味决定 - 自称为匿名函数:
map: ->
key = ( (field)->
# some business logic
)(@field)
emit(key, value)
自称为匿名函数可能非常大,无法有效测试,并可能导致内存泄漏(对此不确定)。
如何解决这个问题?
UPD:
当我说“外部函数”时,是指在同一个文件(同一个类)中声明的函数与“map/reduce”函数。当然,它是在服务器端调用的。
【问题讨论】:
标签: javascript mongodb coffeescript mapreduce