2012-07-01 34 views
9

为了在Capistrano任务中创建MongoDB数据库,我需要弄清楚如何在MongoDB运行auth的时候通过MongoDB shell创建一个新的数据库。如何在auth打开的情况下从命令行创建新的MongoDB?

随着身份验证的开启,MongoDB shell在没有首次验证的情况下就无法做任何事情,但在我意识到的情况下使用数据库时必须进行验证。所以我一直连接到它像首发:

sudo -u mongodb mongo admin --eval "db.auth(username, password)" 

这验证了我采取进一步行动,但......在这一点上我需要创建数据库,并为它在同一个shell会话的用户。我不能:

sudo -u mongodb mongo admin --eval "db.auth(username, password);use new_database" 

因为use database不能在eval中使用。所以,我已经试过代替:

sudo -u mongodb mongo admin --eval "db.auth(username, password);db = connect('localhost:27017/new_database')" 

这实际上将让我的新的数据库我想创建的,但如果我尝试的一个实例:

sudo -u mongodb mongo admin --eval "db.auth(username, password);connect('localhost:27017/new_database').addUser(new_user, new_password)" 

我得到一个验证错误,那么显然使用connect()命令忘记了我以前进行过身份验证。

所以这就是我卡住的地方,试图用MongoDB和管理员用户在一行中创建一个数据库。

有关我如何做到这一点的任何建议?

回答

12

您可以使用db.getSiblingDB(name)引用新的数据库,并添加一个新的帐户,如:

mongo -u username -p password admin --eval "db.getSiblingDB('new_database').addUser('new_user', 'new_password');" 

现在你应该可以使用-u和-p命令行来验证:

mongo -u new_user -p new_password new_database 
+0

运行完美,谢谢! – rjoll

+0

http://docs.mongodb.org/manual/reference/method/db.getSiblingDB/ – kschaper

+0

@kschaper:谢谢,纠正了文档链接(来自旧的维基链接)。 – Stennie

0

请注意addUser函数从版本2.6开始不再使用。

使用db.createUser()db.updateUser()而不是db.addUser()将用户添加到MongoDB。

你的代码应该象下面这样:

mongo -u username -p password admin --eval "db.getSiblingDB('new_database').createUser({ user : 'new_user', pwd : 'new_password', roles : [{ role: 'readWrite', db: 'new_database'}]});" 
相关问题