2015-09-09 17 views
5

Trong file Mongo vỏ js có thể chạy bằng load lệnh:Làm thế nào để chạy js nộp trong Mongo sử dụng dữ liệu mùa xuân

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

Làm thế nào để làm điều này sử dụng lò xo dữ liệu? Hoặc bất kỳ cách nào khác trong Java. Tôi đã thử:

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

và:

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

nhưng nó không hoạt động.

+0

Vỏ MongoDB là JavaScript REPL để cơ bản nó chạy một công cụ JavaScript (v8 thực sự). nếu bạn muốn tải và chạy JavaScript trong ứng dụng Java của mình thì bạn cũng cần phải nhúng một công cụ JavaScript tương tự. Nhưng dường như JavaScript của bạn có thể chỉ là các lệnh shell thì điều này sẽ ít được sử dụng cho bạn. Những gì bạn nên làm là viết lại mã, và bất kỳ mục đích nào bạn nghĩ rằng tệp phục vụ có lẽ là xử lý tốt hơn. –

Trả lời

7

Đây là phần có liên quan của reference docs về cách làm việc với tập lệnh trong dữ liệu 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");  
+0

Điều này không làm việc cho tôi. mã ... scriptOps.register ... không thành công cho tôi (đúng mã được sử dụng tương tự) Lỗi: -------- org.springframework.core.convert.ConverterNotFoundException: Không tìm thấy trình chuyển đổi nào có khả năng chuyển đổi từ loại [org.springframework.data.mongodb.core.script.NamedMongoScript] thành [com.mongodb.DBObject] -------- – vinesh

+0

Đảm bảo bạn sử dụng Spring Data MongoDB 1.7 hoặc cao hơn. Nó đã thêm hỗ trợ cho các hoạt động đó (xem [this] (https://github.com/spring-projects/spring-data-mongodb/commit/a0e42f5dfecf92b386a5d3d6e05b5b2d4f5dce64) [cam kết] (https://github.com/spring-projects/spring-data-mongodb/commit/39d931200551750b718566a5de596d7628774114)) để biết chi tiết. –

+0

@OliverGierke chúng ta có thể thực thi tập lệnh được thực thi không? trong trường hợp của tôi, nó không thực thi –

3

Điều gì xảy ra nếu bạn đọc văn bản JavaScript của mình từ tệp theo cách thủ công và đặt nó vào $ eval? Một cái gì đó như:

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

Nếu nó hoạt động thì hãy kiểm tra xem tệp của bạn có thể truy cập được trong hệ thống tệp phía máy chủ hay không. Bởi vì load() được thực thi ở phía máy chủ.

Các vấn đề liên quan