如何使用 spring 数据 mongo 中的 运行 js 文件

How to run js file in mongo using spring data

在mongo shell js文件中可以运行使用load命令:

load("path/to/file/file.js")

如何使用 spring-数据来做到这一点?或者 Java 中的任何其他方式。 我试过:

BasicDBObject obj = new BasicDBObject();
obj.append( "$load" , "/path/file.js" );
CommandResult t=mongoTemplate.executeCommand(obj);

和:

obj.append( "$eval" , "load(\"/path/file.js\")" );

但是没用。

如果您手动从文件中读取 JavaScript 的文本并将其放入 $eval 会怎样?类似于:

    StringBuilder text = new StringBuilder();
    BufferedReader br = new BufferedReader(new FileReader(
            new File("/path/file.js")));
    try {
        while (true) {
            String line = br.readLine();
            if (line == null)
                break;
            text.append(line).append("\n");
        }
    } finally {
        try { br.close(); } catch (Exception ignore) {}
    }
    BasicDBObject obj = new BasicDBObject();
    obj.append("$eval", text.toString());
    System.out.println(mongoTemplate.executeCommand(obj));

如果有效,请检查您的文件是否可以在服务器端文件系统中访问。因为load()是在服务器端执行的。

这里是 reference docs 的相关部分,介绍如何在 Spring 数据 MongoDB.

中使用脚本
ScriptOperations scriptOps = template.scriptOps();

// Execute script directly
ExecutableMongoScript echoScript = new ExecutableMongoScript("function(x) { return x; }");
scriptOps.execute(echoScript, "directly execute script");     

// Register script and call it later
scriptOps.register(new NamedMongoScript("echo", echoScript)); 
scriptOps.call("echo", "execute script via name");