我使用this example在Mongodb服务器中实现了一个JavaScript函数。
当我使用mongo shell时它工作正常,但我想从Java程序中运行它。这是代码:
public String runFunction() {
CommandResult commandResult1 = db.command("db.loadServerScripts()");
CommandResult commandResult2 = db.command("echoFunction(3)");
return commandResult2.toString();
}
我不明白结果。
答案 0 :(得分:4)
以前的答案在MongoDB 3.4+中不起作用。在版本3.4及更高版本中执行此操作的正确方法是创建BasicDBObject并将其用作Database.runCommand()的参数。这是一个例子。
final BasicDBObject command = new BasicDBObject();
command.put("eval", String.format("function() { %s return;}}, {entity_id : 1, value : 1, type : 1}).forEach(someFun); }", code));
Document result = database.runCommand(command);
答案 1 :(得分:1)
您应该使用DB.eval(),请参阅api docs并确保不进行字符串连接。相反,传递变量。
我认为您的答案可能与this other one on StackOverflow的答案相同。
答案 2 :(得分:1)
ObjectMapper mapper = new ObjectMapper();
然后你可以使用类似的东西:
mongoOperations.getConverter().read(CLASS, DBOBJECT);
和MongoOperation一起:
=FORMULA(cell)
尝试一些解决方法取决于您的要求
答案 3 :(得分:1)
自MongoDB 4.2起,import 'jest';
import 'jest-preset-angular';
命令已删除(在3.0中已弃用)。
没有其他方法可以从Java驱动程序将JavaScript脚本评估为MongoDB。
请参见https://docs.mongodb.com/manual/reference/method/db.eval/