有没有可靠的技术在mongoDB system.js中存储基于原型的库/框架?我在map-reduce中尝试使用dateJS格式时遇到了这个问题。 JIRA #SERVER-770解释说,对象的闭包 - 包括它们的原型 - 在序列化到system.js集合时会丢失,这是预期的行为。不幸的是,这排除了许多优秀的框架,例如dojo,Google Closure和jQuery。
有没有办法以某种方式转换或包含库,使他们不依赖于原型设计?有一些承诺在Map-Reduce之前初始化并通过范围对象传递它们,但到目前为止我还没有太多运气。如果我的方法存在缺陷,那么为mongo启用服务器端javascript重用的更好方法是什么?
答案 0 :(得分:1)
使用JS的每个查询都可以重用或获取一个全新的JS上下文,在该上下文中加载存储的JS对象。 为了做你想做的事,你需要:
第一个肯定是更有趣的功能。 事实证明mongodb v8 build会自动执行(但不是官方支持),但不是官方的spidermonkey构建。
假设您存储的代码如下:
db.system.js.save({ _id: "mylib", value: "myprint = function() { print('installed'); return 'installed';" }
然后在v8中,您可以在代码中自由使用myprint(),但使用SM时,您需要显式调用mylib()。
作为一种解决方法,您可以创建另一种方法:
db.system.js.save({ _id: "installLib", value: "if (!libLoaded) mylib(); libLoaded = true;" }
并从map()函数中调用它。
创建故障单以标准化引擎并允许自动运行: https://jira.mongodb.org/browse/SERVER-4450