Сценарий оболочки mongo не позволит мне включить "использование <database> "

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, введя следующие две команды оболочки:

    > 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});

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

    > 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?

Ответ 1

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

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

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

db2 = connect ("server: 27017/otherdbname")

Ответ 2

В скрипте mongo вы можете использовать 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

Ответ 3

Что ж, до сих пор остается досадно, что "load (" file.js ") и" mongo file.js "на самом деле не используют тот же интерпретатор сценариев, что и интерактивная оболочка mongo. Открытие соединения явно в скрипте потенциально является нарушением принципа DRY, поскольку монго уже знает эту информацию. Тем не менее, что работает, он связывает файл с mongo, а не передает его имя в командной строке:

mongo <file.js