mongoDB's system.js中的库存储技术

techniques for storing libraries in mongoDB's system.js

本文关键字:存储 技术 js system mongoDB      更新时间:2023-09-26

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

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

使用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