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

Javascript 在mongoDB中存储库的技术';s system.js,javascript,mongodb,mapreduce,google-closure-library,Javascript,Mongodb,Mapreduce,Google Closure Library,mongoDB中是否有可靠的技术来存储基于原型的库/框架?我在尝试在map reduce中使用格式时遇到了这个问题。JIRA解释说,对象的闭包(包括它们的原型)在序列化到system.js集合时丢失,这是预期的行为。不幸的是,这排除了许多优秀的框架,例如,和 有没有一种方法可以转换或包含库,使它们不依赖于原型?在Map Reduce之前初始化并通过scope对象传递它们是有希望的,但是到目前为止我还没有太多的运气。如果我的方法有缺陷,那么有什么更好的方法可以让mongo重复使用服务器端javas

mongoDB中是否有可靠的技术来存储基于原型的库/框架?我在尝试在map reduce中使用格式时遇到了这个问题。JIRA解释说,对象的闭包(包括它们的原型)在序列化到system.js集合时丢失,这是预期的行为。不幸的是,这排除了许多优秀的框架,例如,和


有没有一种方法可以转换或包含库,使它们不依赖于原型?在Map Reduce之前初始化并通过scope对象传递它们是有希望的,但是到目前为止我还没有太多的运气。如果我的方法有缺陷,那么有什么更好的方法可以让mongo重复使用服务器端javascript

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

  • mongod在安装时自动运行存储的代码
  • 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()函数中调用它

    创建票证以标准化引擎并允许自动运行: