如何使用 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");
在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");