加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

从Java调用MongoDB函数

发布时间:2020-12-14 05:56:31 所属栏目:Java 来源:网络整理
导读:我正在尝试从MongoDB Java驱动程序调用存储的 JavaScript函数. 我一直在遵循本指南将该函数存储在DB服务器上,我可以从mongo shell调用该函数并返回结果. 但是我无法弄清楚如何在Java中调用相同的函数? 根据这个http://api.mongodb.org/java/current/com/mon
我正在尝试从MongoDB Java驱动程序调用存储的 JavaScript函数.

我一直在遵循本指南将该函数存储在DB服务器上,我可以从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的评论:

“It seems like getNextSequence is a function written in the mongo
javascript shell. Neither the database (mongod) nor the Java side
knows this function exists and neither is able to interprete the
Javascript code the function contains. You will have to reimplement it
in Java. “

我试图实现的函数比上面的例子复杂一点 – 它应该返回一个文档集合,并且似乎没有使用db.doEval方法.

所以我认为评论是正确的?

解决方法

你应该这样做:
return db.doEval("echoFunction(3)").toString();

如果在eval中只使用函数名,则只能在服务器端引用存储函数代码的JavaScript变量.它不会执行它.当您使用括号时,您请求实际执行一个函数.如果你需要发送比数字更复杂的东西,我建议使用JSON序列化器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读