如何使用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()是在服务器端执行的。