Как выполнить внешний файл с помощью оболочки mongo и посмотреть результат в консоли?
У меня есть внешний файл, например query.js
, и я хотел бы выполнить его и увидеть результат в cmd.
Скажем, содержимое файла:
db.users.find()
Как выполнить внешний файл с помощью оболочки mongo и посмотреть результат в консоли?
У меня есть внешний файл, например query.js
, и я хотел бы выполнить его и увидеть результат в cmd.
Скажем, содержимое файла:
db.users.find()
Поместите это в свой query.js
файл:
function get_results (result) {
print(tojson(result));
}
db.col.find().forEach(get_results)
и запустите:
mongo db_name query.js
Здесь хорошее объяснение, почему вы должны делать это таким образом.
Самый простой способ найти запросы mongodb из файла и увидеть вывод в консоли:
query.js
:
use my_db;
db.my_collection.findOne()
В командной строке:
mongo <query.js
Отображает весь вывод на консоль, как если бы вы выполняли запросы в оболочке mongo индивидуально.
Хорошая информация здесь - хотелось бы указать, что 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()
.
Это, кажется, изменилось в какой-то момент в 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
с именем базы данных и укажите на существующий файл
В одном другом ответе не упоминалось, что команда 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.