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

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

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

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

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

和:

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

但它不起作用。

以下是有关如何使用Spring Data 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"); 

如果您手动从文件中读取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()是在服务器端执行的。