Я хочу выполнять mongo
команды в сценарии оболочки, например, в сценарии test.sh
:
#!/bin/sh
mongo myDbName
db.mycollection.findOne()
show collections
Когда я выполняю этот скрипт через ./test.sh
, тогда соединение с MongoDB установлено, но следующие команды не выполняются.
Как выполнить другие команды через скрипт оболочки test.sh
?
.find()
операций необходимо вызвать операцию для объекта результата для печати документов, напримерtoArray()
илиshellPrint()
. например,mongo userdb --eval "printjson(db.users.find().toArray())"
mongo mydb --eval "db.users.find({a:'b'}).pretty().shellPrint()"
... простейший :)mongo --eval "db.version()" --quiet
например, чтобы не печатать весь шум, который ты говоришьПоместите ваш скрипт монго в
.js
файл.Затем выполните
mongo < yourFile.js
Пример:
demo.js // файл содержит ваш скрипт
сохраните этот файл в "c: \ db-scripts"
Затем в командной строке cmd перейдите в "c: \ db-scripts"
Это выполнит код в монго и покажет результат
источник
.js
файл и передаете их как параметр вmongo
команду.use dbName
иshow dbs
будет работать с внутренней подсказки , но не изнутри оболочечному.js
файла. Для команд, не относящихся к JavaScript, есть эквиваленты JavaScript, так что это не ограничение, а просто то, о чем вам нужно знать.mongo dbName -u userName -p "password with spaces" scriptToRun.js
Это работает для меня под Linux:
источник
Поместите это в файл с именем
test.js
:затем запустите его с
mongo myDbName test.js
.источник
Об этом также есть официальная страница документации .
Примеры с этой страницы включают в себя:
источник
Сценарий оболочки ниже также работал хорошо для меня ... определенно пришлось использовать редирект, который Антонин упомянул сначала ... который дал мне идею протестировать здесь документ.
источник
echo -e "use mydb\ndb.leads.findOne()\ndb.leads.find().count()" | mongo
use another_db
. :-)db = db.getSiblingDB('otherdb');
mongo mydb <<EOF
и т. Д.В моей настройке я должен использовать:
источник
Я использую синтаксис «heredoc», который упоминает Дэвид Янг. Но тут есть одна загвоздка
Вышеприведенное НЕ будет работать, потому что фраза «$ Существует» будет видна оболочкой и заменена значением переменной среды с именем «существует». Которого, скорее всего, не существует, поэтому после расширения оболочки оно становится:
Чтобы пройти через него, у вас есть два варианта. Один уродлив, один довольно мил. Во-первых, уродливый: избежать знаков $:
Я НЕ рекомендую это, потому что легко забыть о побеге.
Другой вариант - избежать EOF, например так:
Теперь вы можете поместить все знаки доллара в свой heredoc, и знаки доллара игнорируются. Обратная сторона: это не сработает, если вам нужно поместить параметры / переменные оболочки в ваш монго-скрипт.
Другой вариант, с которым вы можете поиграть, - связываться со своим шебангом. Например,
Есть несколько проблем с этим решением:
Это работает, только если вы пытаетесь сделать скрипт оболочки mongo исполняемым из командной строки. Вы не можете смешивать обычные команды оболочки с командами оболочки Монго. И все, что вы сохраняете при этом, - это не вводить «mongo» в командной строке ... (конечно, достаточно причины)
Он работает точно так же, как «mongo <some-js-file>», что означает, что он не позволяет использовать команду «use <db>».
Я попытался добавить имя базы данных в shebang, который, как вы думаете, будет работать. К сожалению, то, как система обрабатывает строку Шебанга, все после первого пробела передается в виде отдельного параметра (как в кавычках) команде env, и env не может найти и запустить ее.
Вместо этого вы должны встроить изменение базы данных в сам скрипт, например так:
Как и во всем в жизни, «есть более чем один способ сделать это!»
источник
Если у вас включена аутентификация:
источник
Создать файл скрипта; написать команды:
В
file.js
записи вашего Монго запрос:источник
Как насчет этого:
источник
.mongorc
загрузки ( docs.mongodb.org/manual/reference/program/mongo/… )Как и предполагалось
theTuxRacer
, вы можете использовать команду eval , для тех, кто пропускает ее, как я, вы также можете добавить свое имя базы данных, если вы не пытаетесь выполнить операцию на базе данных по умолчанию.источник
Спасибо
printf
! В среде Linux есть лучший способ запустить шоу только в одном файле. Допустим, у вас есть два файлаmongoCmds.js
с несколькими командами:а затем файл оболочки драйвера,
runMongoCmds.sh
Вместо этого есть только один файл, runMongoCmds.sh, содержащий
Bash
printf
гораздо более надежен, чемecho
и позволяет\n
промежуточным командам вводить их в несколько строк.источник
источник
В моем случае, я могу удобно использовать в
\n
качестве разделителя для следующей команды Монго, которую я хочу выполнить, затем направить их вmongo
источник
Флаг --shell также может быть использован для файлов JavaScript
источник
mongo /path/to/jsfile/test.js
будет выступать JS тоже.источник
Недавно мигрировал из mongodb в Postgres. Вот как я использовал сценарии.
Прочтите
scripts.js
и перенаправьте вывод наinserts.sql
.scripts.js
выглядит такinserts.sql
выглядит такисточник
How to execute mongo commands through shell scripts?
Это не по теме. На самом деле я дошел до этого вопроса благодаря названию. Таким людям, как я, полезно читать такой ответ. Кроме того, я даю очень полезный метод в примере, а не игрушечный пример.Если вы хотите обработать его одной строкой, это простой способ.
источник
Я написал различные варианты запуска сценария оболочки Mongo из более крупного сценария Bash.
источник
Решение для единого сценария оболочки с возможностью передачи аргументов mongo (
--quiet
, dbname и т. Д.):-S
Флаг не может работать на всех платформах.источник
При использовании репликационного набора записи должны выполняться на ПЕРВИЧНОМ, поэтому я обычно использую синтаксис, подобный этому, чтобы избежать необходимости выяснять, какой хост является главным:
mongo -host myReplicaset/anyKnownReplica
источник