2012-07-01 62 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'}]});" 
相關問題