Сценарий mongo не позволяет мне включать «use <database>» - PullRequest
31 голосов
/ 19 декабря 2011

32-битный mongo 2.0.1 на компьютере с Windows XP

//script filename: test.js  (one line shell script file to store a person)
db.cTest.save({Name: "Fred", Age:21});

запустить с базой данных dbTest, введя следующие 2 команды оболочки:

    > use dbTest
    switched to dbTest
    > load("test.js")

Пока все хорошо.

Но если я попытаюсь включить в сценарий инструкцию "use", произойдет сбой:

//script filename: test.js  (including "use" statement)
use dbTest;
db.cTest.save({Name: "Fred", Age:21});

произойдет сбой с сообщением об ошибке следующим образом:

    > load("test.js")
    SyntaxError: missing ; before statement
    Mon Dec 19 11:56:31: Error: error loading js file temp.js (shell):1

Добавлениеили удаление точек с запятой в test.js, похоже, не имеет значения.

Так как же поместить директиву use в скрипт оболочки mongo?

Ответы [ 3 ]

52 голосов
/ 09 апреля 2013

В монго-скрипте вы можете использовать db.getSiblingDB('new_db_name'), чтобы получить ссылку на новую базу данных. Таким образом, указывать имя базы данных в командной строке не обязательно. Вы можете использовать script.js:

db = db.getSiblingDB('new_db_name');
print(db);

// the rest of your code for database "new_db_name"

и вывод этого сценария (вызывается с mongo script.js):

MongoDB shell version: 2.2.2
connecting to: test
sag
19 голосов
/ 19 декабря 2011

http://www.mongodb.org/display/DOCS/Scripting+the+shell

использовать dbname
Эта команда не работает в режиме сценариев. Вместо этого вам нужно будет явно определить базу данных в соединении (/ dbname в примере выше).

Кроме того, вы также можете создать соединение в скрипте:

db2 = connect ("сервер: 27017 / otherdbname")

16 голосов
/ 16 июня 2012

К сожалению, «load ('file.js')» и «mongo file.js» на самом деле не используют тот же интерпретатор сценариев, что и интерактивная оболочка mongo.Явное открытие соединения в скрипте потенциально является нарушением принципа СУХОЙ, потому что Монго уже знает эту информацию.Что работает, тем не менее, это передача файла в монго, а не передача его имени в командной строке:

mongo <file.js
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...