Mongo shell выполняет запрос из файла и показывает результат - программирование
Подтвердить что ты не робот

Mongo shell выполняет запрос из файла и показывает результат

Как выполнить внешний файл с помощью оболочки mongo и посмотреть результат в консоли?

У меня есть внешний файл, например query.js, и я хотел бы выполнить его и увидеть результат в cmd.

Скажем, содержимое файла:

db.users.find()
4b9b3361

Ответ 1

Поместите это в свой query.js файл:

function get_results (result) {
    print(tojson(result));
}

db.col.find().forEach(get_results)

и запустите:

mongo db_name query.js

Здесь хорошее объяснение, почему вы должны делать это таким образом.

Ответ 2

Самый простой способ найти запросы mongodb из файла и увидеть вывод в консоли:

query.js:

use my_db;
db.my_collection.findOne()

В командной строке: mongo <query.js

Отображает весь вывод на консоль, как если бы вы выполняли запросы в оболочке mongo индивидуально.

Ответ 3

Хорошая информация здесь - хотелось бы указать, что mongo предоставляет функцию printjson(), поэтому нет необходимости писать самостоятельно, если вам не нужна больше функциональности, чем предоставляет printjson().

Пример файла Mongo (test.js)

// Pretty print all documents in test.scratch
use test
db.scratch.find().forEach(printjson)

Команда

mongo < test.js

Если вы хотите опустить use test из файла mongo, возможно, для удаления указателей ошибок IDE для файлов js, вы можете указать целевую db в командной строке:

mongo test < test.js

Интересно отметить: в приведенных выше примерах используется перенаправление, чтобы вставить файл в оболочку mongo. Это соглашение о вызове позволяет вводить команды так же, как и в оболочке; включая удобные команды оболочки манго, такие как use test.

Mongo предоставляет другое соглашение о вызове script: mongo test test.js, которое опускает оператор перенаправления. Для этого вызывающего соглашения требуется test.js быть надлежащим javascript и не может использовать удобные методы оболочки mongo, такие как use test; можно использовать эквиваленты javascript, такие как getSiblingDB().

Ответ 4

Это, кажется, изменилось в какой-то момент в mongo cli, мне пришлось выполнить следующую команду, чтобы заставить его запустить файл с базой данных (с mongo cli version 3.4.9)

mongo mongodb://192.168.1.1/YourDataBase scriptFile.js

Затем замените 192.168.1.1 на ip/hostname вашего db, YourDataBase с именем базы данных и укажите на существующий файл

Ответ 5

В одном другом ответе не упоминалось, что команда use db не будет работать во внешнем script. Лучше всего использовать getSiblingDB, например, если я хочу использовать базу данных под названием my_db:

db = db.getSiblingDB("my_db");

function get_results (result) {
    print(tojson(result));
}

db.col.find().forEach(get_results)

Затем все работает так, как вы ожидали. См. Write Scripts для оболочки mongo.