Using Mongo Shell to Operating MongoDB Instance on Docker

介紹如何使用Mongo Shell操作執行在Docker內的MongoDB Instance

Connect and Execute into Docker Instance

當我們使用Docker來建立我們的MongoDB時我們可以透過直接連線至Docker執行中的Instance內進行操作.

首先我們可以先查看一下目前運行的Container有哪些:

docker ps

接著我們可以透過下面指令連至Instance內:

docker exec -ti <container id> bash

docker_exec

Mongo Shell

我們可以透過mongo這個指令直接進入mongo shell當中

mongo

mongodb_shell

當我們看到版本資訊與歡迎文字後即可開始輸入我們要的指令, 完整的指令可以參考mongo Shell Methods

Use Database

當我們需要建立一個新的Database時我們需要用use這個指令

use <database>

接著我們可以用db這個指令列出目前的database

db

mongodb_shell

而當我們需要切換database時也可用use這個指令

Create Collection

接著我們新增一個collection

db.createCollection("member")

mongodb_shell_create_collection

這邊的第二個參數為選擇性加入,細節參考db.createCollection()

Create Document

接著我們可以透過下面指令新增一筆檔案進入指定的collection內

db.member.insertOne( { name: "blackie" } );

mongodb_shell_create_document

Create User

我們可以透過下面指令建立一個擁有dbOwner權限的帳號

db.createUser(
{
    user: "dbdemo",
    pwd: "pass.123",
    roles: [ { role: "dbOwner", db: "demo" } ]
}
)

mongo_shell_create_dbOwner

由於dbOwner這個role是預設建立(built-in)的角色,包括了readWrite, dbAdmin 與 userAdmin這三個角色的權限.對於role這邊可以參考Built-In Roles瞭解更多預設角色.

我們也可以透過以下指令建立一個新的user並只綁定readWrite與dbAdmin兩個角色

db.createUser(
    {
        user: "dbAdmin",
        pwd: "pass.123",
        roles: [ { role: "readWrite", db: "demo" },
                { role: "dbAdmin", db: "demo"} ]
    }
)

mongodb_shell_user

細節參考User Management Methods

Using User login(Auth)

當我們新增user給指定database後我們就可以使用該user登入,而在登入前我們可以使用下面指令測試登入:

db.auth("user name","password")

mongo_shell_auth

而登我們下次登入時則可使用-u, -p 與–authenticationDatabase參數,用該user做登入:

mongo –port 27017 -u “user name” -p “password” –authenticationDatabase “demo”

mongo_shell_login_auth

References