Windows XP计算机上的32位mongo 2.0.1
//script filename: test.js (one line shell script file to store a person)
db.cTest.save({Name: "Fred", Age:21});
通过输入以下2个shell命令对数据库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});
失败,错误消息如下:
> 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 shell脚本中呢?
答案 0 :(得分:51)
在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
答案 1 :(得分:19)
http://www.mongodb.org/display/DOCS/Scripting+the+shell
使用dbname
此命令在脚本模式下不起作用。相反,您需要在连接中显式定义数据库(上例中的/ dbname)。或者,您也可以在脚本中创建连接:
db2 = connect("服务器:27017 / otherdbname")
答案 2 :(得分:16)
嗯,仍然不幸的是“load('file.js')”和“mongo file.js”实际上并没有使用与交互式mongo shell相同的脚本解释器。在脚本中显式打开连接可能违反了DRY原则,因为mongo已经知道该信息。但是,工作是将文件传输到mongo而不是在命令行上传递它的名称:
mongo <file.js