0

是否有任何可靠的技术可以在 mongoDB 的system.js中存储基于原型的库/框架?我在尝试在 map-reduce 中使用dateJS格式时遇到了这个问题。JIRA #SERVER-770解释了对象的闭包——包括它们的原型——在序列化到 system.js 集合时会丢失,这是预期的行为。不幸的是,这不包括许多优秀的框架,例如dojoGoogle ClosurejQuery

有没有办法以某种方式转换或包含库,使它们不依赖原型设计?有一些承诺会在 Map-Reduce 之前初始化并通过范围对象传递它们,但到目前为止我还没有多少运气。如果我的方法有缺陷,那么为 mongo 启用服务器端 javascript 重用的更好方法是什么?

4

1 回答 1

1

每个使用 JS 的查询都可以重用或获取一个全新的 JS 上下文,在该上下文中加载存储的 JS 对象。为了做你想做的事,你需要:

  1. mongod 在安装时自动运行存储的代码
  2. mapreduce 有一个 init 方法

第一个绝对是更有趣的功能。事实证明,mongodb v8 构建会自动完成(但不受官方支持),但不是官方的 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

于 2011-12-07T18:41:16.113 回答