gpt4 book ai didi

java - 从 Java 调用 MongoDB 函数

转载 作者:IT老高 更新时间:2023-10-28 13:27:04 26 4
gpt4 key购买 nike

我正在尝试从 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 的评论:

"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 方法似乎不起作用。

所以我猜评论是正确的?

最佳答案

您可以使用 java 驱动程序完成所有这些操作。

MongoClient mongoClient = new MongoClient();
MongoDatabase mdb = mongoClient.getDatabase("TestDB");

/* run this <code snippet> in bootstrap */
BsonDocument echoFunction = new BsonDocument("value",
new BsonJavaScript("function(x1) { return x1; }"));

BsonDocument myAddFunction = new BsonDocument("value",
new BsonJavaScript("function (x, y){ return x + y; }"));

mdb.getCollection("system.js").updateOne(
new Document("_id", "echoFunction"),
new Document("$set", echoFunction),
new UpdateOptions().upsert(true));

mdb.getCollection("system.js").updateOne(
new Document("_id", "myAddFunction"),
new Document("$set", myAddFunction),
new UpdateOptions().upsert(true));

mdb.runCommand(new Document("$eval", "db.loadServerScripts()"));
/* end </code snippet> */

Document doc1 = mdb.runCommand(new Document("$eval", "echoFunction(5)"));
System.out.println(doc1);

结果也是:

Document{{retval=5.0, ok=1.0}}

关于java - 从 Java 调用 MongoDB 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32480060/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com