Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在启用auth的情况下从命令行创建新的MongoDB?_Mongodb_Capistrano - Fatal编程技术网

如何在启用auth的情况下从命令行创建新的MongoDB?

如何在启用auth的情况下从命令行创建新的MongoDB?,mongodb,capistrano,Mongodb,Capistrano,为了在Capistrano任务中创建MongoDB数据库,我需要弄清楚当MongoDB在启用auth的情况下运行时如何通过MongoDB shell创建新数据库 启用auth后,MongoDB shell在没有先进行身份验证的情况下无法执行任何操作,但据我所知,身份验证必须在使用admin数据库时进行。因此,我已经开始连接到它,比如: sudo -u mongodb mongo admin --eval "db.auth(username, password)" 这验证了我的进一步操作,但是…

为了在Capistrano任务中创建MongoDB数据库,我需要弄清楚当MongoDB在启用auth的情况下运行时如何通过MongoDB shell创建新数据库

启用auth后,MongoDB shell在没有先进行身份验证的情况下无法执行任何操作,但据我所知,身份验证必须在使用admin数据库时进行。因此,我已经开始连接到它,比如:

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()
命令显然会忘记我以前已经过身份验证

这就是我遇到的问题,我试图使用auth和admin用户在一行中创建一个数据库

有什么建议吗?

您可以使用它来引用新数据库并添加新帐户,例如:

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

请注意,自2.6版以来,
addUser
函数已被弃用

使用
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'}]});"

@谢谢,更正了文档链接(来自旧的wiki链接)。