2015-09-09 8 views
5

मोंगो खोल js फ़ाइल में उपयोग करते हुए मोंगो में दाखिल load आदेश का उपयोग कर चलाया जा सकता है:कैसे js चलाने के लिए वसंत डेटा

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

इस का उपयोग करते हुए वसंत-डाटा कैसे करना है? या जावा में किसी भी अन्य तरीके से। मैं कोशिश की है:

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

और:

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

लेकिन यह काम नहीं करता।

+0

मोंगोडीबी खोल एक जावास्क्रिप्ट आरईपीएल है, इसलिए यह अनिवार्य रूप से एक जावास्क्रिप्ट इंजन (v8 वास्तव में) चलाता है। यदि आप अपने जावा एप्लिकेशन में जावास्क्रिप्ट को लोड और चलाने के लिए चाहते हैं तो आपको इसी प्रकार एक जावास्क्रिप्ट इंजन एम्बेड करना होगा। लेकिन ऐसा लगता है कि आपकी जावास्क्रिप्ट की संभावना केवल शेल कमांड है, तो यह आपके लिए बहुत कम उपयोग होना चाहिए। आपको क्या करना चाहिए कोड को दोबारा लिखना है, और जो भी उद्देश्य आपको लगता है कि फाइल परोसता है, वैसे भी शायद बेहतर तरीके से संभाला जा सकता है। –

उत्तर

7

वसंत डेटा MongoDB में स्क्रिप्ट के साथ काम करने के तरीके पर reference docs का प्रासंगिक खंड यहां दिया गया है।

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

यह डो मेरे लिए काम नहीं करता है। कोड ... scriptOps.register ... मेरे लिए विफल रहता है (बिल्कुल एक ही कोड प्रयोग किया जाता) त्रुटि: -------- org.springframework.core.convert.ConverterNotFoundException: नहीं कनवर्टर करने में सक्षम पाया टाइप [org.springframework.data.mongodb.core.script.NamedMongoScript] से टाइप करने के लिए [com.mongodb.DBObject] -------- – vinesh

+0

सुनिश्चित करें कि आप स्प्रिंग डेटा मोंगोडीबी 1.7 या बेहतर का उपयोग करें। इसने उन परिचालनों के लिए समर्थन जोड़ा है (देखें [इन] (https://github.com/spring-projects/spring-data-mongodb/commit/a0e42f5dfecf92b386a5d3d6e05b5b2d4f5dce64) [commits] (https://github.com/spring-projects/वसंत-डेटा-मगोडब/प्रतिबद्ध/39 डी 3 9 0000551750b718566a5de596d7628774114)) विवरण के लिए। –

+0

@OliverGierke क्या हम निष्पादन योग्य स्क्रिप्ट लंबे समय तक निष्पादित कर सकते हैं ?? मेरे मामले में यह निष्पादित नहीं है –

3

क्या होगा यदि आप फ़ाइल से मैन्युअल रूप से अपनी जावास्क्रिप्ट का टेक्स्ट पढ़ते हैं और इसे $ 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)); 

यदि यह काम करता है तो जांचें कि आपकी फ़ाइल सर्वर-साइड फ़ाइल सिस्टम में पहुंच योग्य है। क्योंकि सर्वर (पक्ष) पर लोड() निष्पादित किया जाता है।

संबंधित मुद्दे