Доступ к оболочке mongo из приложения

#java #mongodb #shell

#java #mongodb #оболочка

Вопрос:

Я ищу подход к интеграции оболочки mongo в мое приложение. Интересно, как этого добиться. Может быть два случая,

  1. Я создал файл, содержащий запрос mongo. Также создайте список, содержащий все учетные данные mongodb. Цель моего приложения — автоматически запускать запрос mongo из файла в оболочку mongo. Я застрял в том, как вызвать и запустить оболочку mongo из приложения.
  2. Или есть ли какой-либо способ привязать интерпретатор оболочки mongo в моем приложении? Как и https://www.tutorialspoint.com/mongodb_terminal_online.php

Мое приложение написано на Java.

Ответ №1:

вы можете запустить оболочку mongo из своего java-приложения следующим образом, предполагая, что ваш двоичный файл mongo правильно связан. Но было бы лучше использовать драйвер Java вместо этого, как сказали другие.

Вы можете найти больше о выполнении запроса Mongo из командной строки здесь: 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);
        }
    }
}
 

Комментарии:

1. Спасибо.. проверю это .. используя драйвер Java для моего сценария, я нахожу это более сложным .. поскольку запрос mongo записывается во внешний файл, а запрос записывается в запросе оболочки.. моему приложению необходимо прочитать запрос оболочки из файла и выполнить.. Поэтому мне сложно преобразовать запрос оболочки в запрос на основе Java.. Есть ли у вас какие-либо предложения относительно этого сценария?

2. не могли бы вы, пожалуйста, дать небольшое объяснение параметру этой строки: Process pr = rt.exec(новая строка[]{«mongo», db, «—eval», запрос});

3. @oxvoxic посмотрите мое редактирование, дайте мне знать, если оно недостаточно ясно!

Ответ №2:

Вы можете делать все, что хотите, используя драйвер Java MongoDB. Именно так MongoDB предназначен для доступа с помощью Java, и именно так я бы это сделал. Хотя я уверен, что вы могли бы найти способ получить доступ к оболочке из Java, это похоже на взлом.

Я бы использовал драйвер Java, если у вас нет веских причин поступать иначе. Для ваших конкретных потребностей посмотрите на функцию Eval .

Что касается вашего второго примера — я подозреваю, что это просто веб-интерфейс, который оформлен так, чтобы выглядеть как экземпляр терминала. Вероятно, для выполнения команд используется любой драйвер языка на стороне сервера.

Комментарии:

1. спасибо за быстрый ответ.. упомянутый выше комментарий @felix ответ, сценарий моего приложения, который вызывает у меня головную боль, как затем использовать драйвер Java