2015-09-09 4 views
5

W pliku js Mongo powłoki można uruchomić za pomocą polecenia: loadJak uruchomić plik js w Mongo wykorzystaniem danych wiosenne

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

Jak to zrobić za pomocą sprężyny-data? Lub w inny sposób w Javie. Próbowałem:

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

oraz:

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

ale to nie działa.

+0

Powłoka MongoDB jest REPL JavaScript, więc w zasadzie uruchamia silnik JavaScript (w rzeczywistości v8). jeśli chciałbyś załadować i uruchomić JavaScript w swojej aplikacji Java, to podobnie musiałbyś osadzić silnik JavaScript. Ale wydaje się, że twój JavaScript to najprawdopodobniej komendy powłoki, więc nie powinno ci to służyć. To, co powinieneś zrobić, to przepisanie kodu i jakikolwiek cel, według którego uważasz, że ten plik jest serwowany, jest prawdopodobnie lepiej rozwiązany. –

Odpowiedz

7

Oto odpowiednia sekcja reference docs dotycząca pracy ze skryptami w 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");  
+0

Ta łania nie działa dla mnie. kod ... scriptOps.register ... nie dla mnie (dokładnie taki sam kod używany) Błąd: -------- org.springframework.core.convert.ConverterNotFoundException: Nie znaleziono konwerter zdolny konwersja z typu [org.springframework.data.mongodb.core.script.NamedMongoScript] w celu wpisania [com.mongodb.DBObject] -------- – vinesh

+0

Upewnij się, że używasz Spring Data MongoDB 1.7 lub nowszego. Dodał wsparcie dla tych operacji (patrz [te] (https://github.com/spring-projects/spring-data-mongodb/commit/a0e42f5dfecf92b386a5d3d6e05b5b2d4f5dce64) [zobowiązuje się] (https://github.com/spring-projects/spring-data-mongodb/commit/39d931200551750b718566a5de596d7628774114)) w celu uzyskania szczegółowych informacji. –

+0

@OliverGierke czy skrypt wykonywalny jest długi, czy zostanie wykonany? w moim przypadku nie jest to wykonanie –

3

Co zrobić, jeśli ręcznie odczytasz tekst kodu JavaScript z pliku i wstawisz go do $ eval? Coś jak:

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

Jeśli to działa, sprawdź, czy twój plik jest dostępny w systemie plików po stronie serwera. Ponieważ load() jest wykonywane po stronie serwera.