2016-10-17 5 views
0

Ich bin auf der Suche nach dem Ansatz der Integration von Mongo Shell in meiner Anwendung. Frage mich, wie man das erreicht. Es könnte zwei Fälle geben,Zugang Mongo Shell von der Anwendung

  1. Ich erstellte eine Datei, die Mongo-Abfrage enthalten. Erstellen Sie auch eine Liste, die alle Anmeldeinformationen von mongodb enthält. Das Ziel meiner Anwendung ist es, die Mongo-Abfrage automatisch von der Datei zur mongo-Shell auszuführen. Ich bin daran hängen, wie mongo Shell von der Anwendung aufrufen und ausführen.

  2. Oder gibt es eine Möglichkeit, Mongo Shell Interpreter in meiner Anwendung zu binden? Wie zum Beispiel https://www.tutorialspoint.com/mongodb_terminal_online.php

Meine Anwendung ist in Java geschrieben.

Antwort

0

Sie können mongo Shell von Ihrer Java-Anwendung wie folgt ausführen, vorausgesetzt, Ihre Mongo-Binärdatei ist korrekt verknüpft. Aber es wäre viel besser, den Java-Treiber stattdessen zu verwenden, wie andere sagten.

Sie können mehr über die Ausführung Mongo Abfrage von der Kommandozeile finden Sie hier: 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

Danke .. wird es testen .. mit Java-Treiber für mein Szenario, finde ich es komplizierter .. wie die Mongo-Abfrage in externe Datei geschrieben wird und Abfrage in Shell-Abfrage geschrieben wird .. meine Anwendung muss die Shell lesen Abfrage von Datei und ausführen .. So finde ich es schwierig, Shell-Abfrage in Java-basierte Abfrage zu konvertieren .. Haben Sie Vorschläge in Bezug auf dieses Szenario? – oxvoxic

+0

können Sie plz geben wenig Erklärung über den Parameter dieser Linie: Prozess pr = rt.exec (new String [] {"mongo", db, "- eval", Abfrage}); – oxvoxic

+0

@oxvoxic siehe meine Bearbeitung, lass es mich wissen, wenn es nicht klar genug ist! – felix

0

Sie können die gewünschten Dinge mit the Java MongoDB driver tun. Auf diese Weise soll MongoDB mit Java erreichbar sein und so würde ich es machen. Während ich sicher bin, dass Sie einen Weg finden könnten, von Java auf die Shell zuzugreifen, scheint es ein Hack zu sein.

Ich würde den Java-Treiber verwenden, es sei denn, Sie haben einen zwingenden Grund, etwas anderes zu tun. Für Ihre spezifischen Bedürfnisse schauen Sie auf die Eval function.

In Bezug auf Ihr zweites Beispiel - ich vermute, das ist nur ein Web-Front-End, das wie eine Terminal-Instanz aussehen soll. Es verwendet wahrscheinlich den serverseitigen Sprachtreiber, um die Befehle auszuführen.

+0

Dank für die schnelle Antwort .. oben Kommentar @felix Antwort erwähnt, Szenario meiner Anwendung, die ich geben Kopfschmerzen, wie dann Java verwenden Treiber – oxvoxic

Verwandte Themen