2015-09-09 4 views
5

In Mongo Shell js Datei Datei kann mit load Befehl ausgeführt werden:Wie läuft js in Mongo mit Feder Daten

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

Wie dies mit Feder-Daten zu tun? Oder jede andere Art in Java. Ich habe versucht:

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

und:

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

aber es funktioniert nicht.

+0

Die MongoDB-Shell ist eine JavaScript-REPL, so dass sie im Wesentlichen eine JavaScript-Engine ausführt (eigentlich v8). wenn Sie in Ihrer Java-Anwendung laden und auszuführen JavaScript wollten dann müßten Sie in ähnliche Weise ein JavaScript-Engine einbetten. Aber wenn du glaubst, dass dein JavaScript wahrscheinlich nur Shell-Befehle sind, dann sollte dir das wenig nützen. Was Sie tun sollten, ist den Code neu zu schreiben, und welcher Zweck auch immer Sie denken, dass diese Datei dient, wird wahrscheinlich sowieso besser behandelt. –

Antwort

7

Hier ist der entsprechende Abschnitt der reference docs, wie mit Skripten in Spring Data MongoDB zu arbeiten.

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");  
+0

Diese doe nicht für mich arbeiten. Code ... scriptOps.register ... für mich nicht (genau denselben Code verwendet wird) Fehler: -------- org.springframework.core.convert.ConverterNotFoundException: Kein Konverter gefunden fähig ist Konvertieren von Typ [org.springframework.data.mongodb.core.script.NamedMongoScript] in type [com.mongodb.DBObject] -------- – vinesh

+0

Stellen Sie sicher, dass Sie Spring Data MongoDB 1.7 oder höher verwenden. Es hat Unterstützung für diese Operationen hinzugefügt (siehe [diese] (https://github.com/spring-projects/spring-data-mongodb/commit/a0e42f5dfecf92b386a5d3d6e05b5b2d4f5dce64) [commits] (https://github.com/spring-projects/spring-data-mongodb/commit/39d931200551750b718566a5de596d7628774114)) für Details. –

+0

@OliverGierke können wir Executable Skript lange wird es ausführen ?? in meinem Fall wird es nicht ausgeführt –

3

Was ist, wenn Sie Text von Ihrem JavaScript manuell aus der Datei lesen und in $ eval setzen? Etwas wie:

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)); 

Wenn es funktioniert dann überprüfen Sie, dass Ihre Datei im serverseitigen Dateisystem zugänglich ist. Weil load() auf Serverseite ausgeführt wird.

Verwandte Themen