假设我有一个包含多个函数定义的纯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分解为分解为本机操作的应用程序逻辑