#java #mongodb #shell
#java #mongodb #оболочка
Вопрос:
Я ищу подход к интеграции оболочки mongo в мое приложение. Интересно, как этого добиться. Может быть два случая,
- Я создал файл, содержащий запрос mongo. Также создайте список, содержащий все учетные данные mongodb. Цель моего приложения — автоматически запускать запрос mongo из файла в оболочку mongo. Я застрял в том, как вызвать и запустить оболочку mongo из приложения.
- Или есть ли какой-либо способ привязать интерпретатор оболочки 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