2016-10-17 4 views
0

私のアプリケーションでmongoシェルを統合するアプローチを探しています。これを達成する方法が不思議です。アプリケーションからmongoシェルにアクセスする

  1. 私はmongoクエリを含むファイルを作成しました。また、mongodbのすべての資格情報を含むリストを作成します。私のアプリケーションの目的は、ファイルからmongoシェルに自動的にmongoクエリを実行することです。私はアプリケーションからmongoシェルを呼び出して実行する方法に悩まされています。

  2. または、アプリケーションにmongoシェルインタープリタをバインドする方法はありますか?ようにhttps://www.tutorialspoint.com/mongodb_terminal_online.php

私のアプリケーションはjavaで書かれています。

答えて

0

あなたのmongoバイナリが正しくリンクされていると仮定して、このようにJavaアプリケーションからmongoシェルを実行することができます。しかし、代わりにJavaドライバを使用する方が良いでしょう、他の人が言ったように。

あなたがここにコマンドラインからのmongoクエリを実行する詳細については見つけることができます:コメント@felixの答え上記の迅速な応答を https://docs.mongodb.com/v3.2/tutorial/write-scripts-for-the-mongo-shell/

package test; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.logging.Level; 
import java.util.logging.Logger; 


public class Test { 

    public static void main(String[] args) { 
     Runtime rt = Runtime.getRuntime(); 
     try { 

      // the query you want to run in mongo, you can get it 
      // from a file using a FileReader 
      String query = "db.col.find();"; 

      // the database name you need to use 
      String db = "database"; 

      // run a command from terminal. this line is equivalent to 
      // mongo database --eval "db.col.find()" 
      // it calls the mongo binary and execute the javascript you 
      // passed in eval parameter. It should work for both unix and 
      // windows 
      Process pr = rt.exec(new String[]{"mongo", db, "--eval", query}); 
      // read the output of the command 
      InputStream in = pr.getInputStream(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 
      StringBuilder out = new StringBuilder(); 
      String line; 
      while ((line = reader.readLine()) != null) { 
       out.append(line); 
      } 

      // print the command and close outputstream reader 
      System.out.println(out.toString()); 
      reader.close(); 
     } catch (IOException ex) { 
      Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 
+0

ありがとう..私のシナリオではjavaドライバを使用してテストします。もっと複雑です。mongoクエリは外部ファイルで作成され、クエリはシェルクエリで記述されています..私のアプリケーションはシェルを読む必要がありますファイルからのクエリと実行..だから私はそれが難しいのJavaベースのクエリには、シェルのクエリを変換する見つける。あなたはこのシナリオに関する任意の提案がありますか? – oxvoxic

+0

この行のパラメータについては、ほとんど説明できません:Process pr = rt.exec(new String [] {"mongo"、db、 "--eval"、query}); – oxvoxic

+0

@oxvoxic私の編集を見て、それが十分明確でないかどうか教えてください! – felix

0

the Java MongoDB driverを使用して必要な作業を行うことができます。これは、MongoDBがJavaを使用してアクセスされることを意図している方法で、これは私がやる方法です。私はあなたがJavaからシェルにアクセスする方法を見つけることができると確信していますが、それはハックのようです。

あなたがそうしなければならない魅力的な理由がない限り、私はJavaドライバを使用します。具体的なニーズについてはEval functionをご覧ください。

2つ目の例については、端末インスタンスのように見えるようにスタイルされたウェブフロントエンドだと思われます。おそらく、コマンドを実行するサーバー側の言語ドライバーを使用しています。

+0

おかげで..私は、その後のJavaを使用する方法頭痛与える自分のアプリケーションのシナリオドライバ – oxvoxic

関連する問題