[英]How do I execute a MongoDB js script using the Java MongoDriver
我已经使用这个例子在 Mongodb 服务器中实现了一个 JavaScript 函数。
当我使用 mongo shell 时它工作正常,但我想从 Java 程序内部运行它。 这是代码:
public String runFunction() {
CommandResult commandResult1 = db.command("db.loadServerScripts()");
CommandResult commandResult2 = db.command("echoFunction(3)");
return commandResult2.toString();
}
我不明白结果。
以前的答案在 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);
从 MongoDB 4.2 起, eval
命令被删除(它在 3.0 中被弃用)。 没有更多方法可以从 Java 驱动程序将 JavaScript 脚本评估到 MongoDB 中。
请参阅https://docs.mongodb.com/manual/reference/method/db.eval/
您应该使用 DB.eval(),查看api 文档并确保您不进行字符串连接。 而是通过变量。
我认为您的答案可能与StackOverflow 上的另一个答案相同。
@Autowired
private MongoOperations mongoOperations;
private final BasicDBObject basicDBObject = new BasicDBObject();
@PostConstruct
private void initialize() {
basicDBObject.put("eval", "function() { return db.loadServerScripts(); }");
mongoOperations.executeCommand(basicDBObject);
}
private void execute() {
basicDBObject.put("eval", "function() { return echoFunction(3); }");
CommandResult result = mongoOperations.executeCommand(basicDBObject);
}
然后你可以使用类似的东西:
ObjectMapper mapper = new ObjectMapper();
和 MongoOperation 的:
mongoOperations.getConverter().read(CLASS, DBOBJECT);
只是尝试有一些解决方法取决于您的要求
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.