【发布时间】:2015-09-09 12:52:03
【问题描述】:
我正在尝试从 MongoDB Java 驱动程序调用存储的 JavaScript 函数。
我一直按照本指南将函数存储在数据库服务器上,我可以从 mongo shell 调用函数并返回结果。
但是我不知道如何在 Java 中调用相同的函数?
根据这个http://api.mongodb.org/java/current/com/mongodb/DB.html#doEval-java.lang.String-java.lang.Object...-有一个方法叫doEval
我也试过用这个方法:
public static String callFunction() {
try (MongoClient client = new MongoClient("localhost")) {
com.mongodb.DB db = client.getDB("TestDB");
return db.doEval("echoFunction", 3).toString();
}
}
但是当我调用该方法时,我得到的是:
{ "retval" : { "$code" : "function (x) {\n return x;\n}"} , "ok" : 1.0}
在这种情况下,我希望能找回数字 3。
上述代码的另一个问题是 client.getDB() 方法已被弃用。据我了解,调用的新方法是client.getDatabase(),它返回一个MongoDatabase 对象,但根据API,没有执行函数的方法。
所以我的问题是:是否可以通过 Java 在数据库服务器上执行存储的 JavaScript 函数并取回该函数的结果?如果可能的话,我会很感激一些关于如何做到这一点的帮助?
谢谢。
编辑:
根据Calling server js function on mongodb from java的评论:
"好像getNextSequence是mongo里写的函数 javascript外壳。既不是数据库(mongod)也不是Java端 知道此功能存在,但两者都无法解释 函数包含的 Javascript 代码。您将不得不重新实现它 在爪哇。 "
我试图实现的函数比上面的例子要复杂一些——它应该返回一个文档集合,而使用 db.doEval 方法似乎不起作用。
所以我猜评论是正确的?
【问题讨论】: