繁体   English   中英

如何使用 Java MongoDriver 执行 MongoDB js 脚本

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM