Сценарий оболочки 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