基于纯javascript函数为mongo定义服务器功能

时间:2016-04-18 02:55:27

标签: javascript mongodb

假设我有一个包含多个函数定义的纯javascript文件。它不包含任何特定于mongo的内容 - 这些函数解析并评估文档上的查询。我想将这些函数用于服务器查询(例如db.collection.find(...)或map-reduce)。我怎么能这样做,以便服务器功能基本上可以调用纯javascript文件中的内容?

示例:在foobar.js中 -

function foo(query, doc) {
    // some predicate, for now lets simulate by evaluating a boolean field called 'available'
    return doc.available;
}

根据https://docs.mongodb.org/manual/tutorial/store-javascript-function-on-server/ 我必须这样做:

db.system.js.save(
   {
     _id : "bar" ,
     value : function (query, doc){
         return doc.available;
     }
   }
);

然后调用db.loadServerScripts(); 运行以下内容可以获得所需的结果:

db.myCollection.find(function() { return bar("some query", this) ;})

但是,我想避免在此db.system.js.save调用中内联函数。这些函数属于我不维护的库。如果javascript库有任何更改,我将不得不手动将它们转换为db.system.js.save调用。

我想在mongo shell中运行类似的东西:

load("foobar.js")
db.system.js.save(
   {
     _id : "baz" ,
     value : function (query, doc){
         return foo(query, doc);
     }
   }
);

然后:

db.myCollection.find(function() { return baz("some query", this); })

但我得到一个" ReferenceError:foo未定义"在我的调用中调用baz。功能" foo"显然不在范围内。建议或替代方案?

免责声明:我了解除了将javascript的复杂性转移到我的应用程序之外,首选使用本机操作。但是,我没有足够的资源将逻辑从javascript分解为分解为本机操作的应用程序逻辑

0 个答案:

没有答案