技術的な話

【MongoDB】初めての人向け コマンド一覧

MongoDB触るの初なので最初に調べた操作内容をまとめました。

とりあえずこの辺は必須で覚えるレベルのものです。他のリレーショナルなDBMS(MySQL、Oracleとか)をCLIで操作したことがある人はcollectionの操作に少し戸惑いを覚えるかもしれませんが、慣れれば意外と覚えることが少ない気が…しています。

環境

  • Docker 20.10.11
  • MongoDB 5.0.6

ログイン、ログアウト

root@c1f9c5d90bea:/# mongo -u root
MongoDB shell version v5.0.6
Enter password: 
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb

=========== 中略 ===========

        To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---

>

# logout
> exit
bye

データベース一覧、ユーザ一覧

とりあえずログインに成功したらDatabase一覧を参照したり、ユーザ一覧を参照したくなりますよね。

# show database list
> show dbs;
admin         0.000GB
config        0.000GB
local         0.000GB

# show user list
> use admin
switched to db admin
> db.system.users.find().pretty()
{
        "_id" : "admin.root",
        "userId" : UUID("xxxxxxxxxxxxxxxxxxxxxxxxxxxx),
        "user" : "root",
        "db" : "admin",
        "credentials" : {
                "SCRAM-SHA-1" : {
                        "iterationCount" : 10000,
                        "salt" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                        "storedKey" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                        "serverKey" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
                },
                "SCRAM-SHA-256" : {
                        "iterationCount" : 15000,
                        "salt" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                        "storedKey" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                        "serverKey" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
                }
        },
        "roles" : [
                {
                        "role" : "root",
                        "db" : "admin"
                }
        ]
}

データベース作成、コレクション作成

useコマンドで空のデータベースが作成できます。

ただ、空のデータベースだと一覧には表示されなくて、collectionを作成した時点で表示されるようです。

> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

> use mongodb
switched to db mongodb

# この時点では一覧に表示されない
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

> db.createCollection("sample")
{ "ok" : 1 }

# collectionを作成すると一覧に表示される
> show dbs
admin    0.000GB
config   0.000GB
local    0.000GB
mongodb  0.000GB

コレクション一覧

> show dbs
admin    0.000GB
config   0.000GB
local    0.000GB
mongodb  0.000GB

> use mongodb
switched to db mongodb

> show collections
sample

データ挿入と参照

この辺の操作コマンドは入力しまくって身体に染み込ませた方が良いかもしれません。

下記の例にある<collection>にはdb.createCollection("xxxxx")で作成したコレクション名「xxxxx」を入力します。

> show dbs
admin    0.000GB
config   0.000GB
local    0.000GB
mongodb  0.000GB

> use mongodb
switched to db mongodb

# <your-collection>には作成したcollection名を入力します
> db.<collection>.insert( { sample1:"hoge", sample2:"fuga"} );
WriteResult({ "nInserted" : 1 })

> db.<collection>.find().pretty()
{
        "_id" : ObjectId("620bcde0f3a887a0d489a3f4"),
        "sample1" : "hoge",
        "sample2" : "fuga"
}

データベース削除

最初にuseコマンドで削除するデータベースに変更しておく必要があります。

> show dbs
admin    0.000GB
config   0.000GB
local    0.000GB
mongodb  0.000GB

> use mongodb
switched to db mongodb

# データベース削除操作(use xxxで現在指定しているデータベースが削除されます)
> db.dropDatabase()
{ "ok" : 1 }

> show dbs
admin    0.000GB
config   0.000GB
local    0.000GB

ユーザ作成

例えば何かしらのアプリケーションからrootユーザで接続していたらセキュリティ的に良くないので、対象のデータベースのみを操作可能なユーザを作成します。

> use mongodb

> db.createUser(
    {
      user: "<username>",
      pwd: "<password>",
      roles: [
        { 
          # "read" or "readWrite" or "dbOwner" or "userAdmin"
          role: "readWrite", 
          db: "<database>" 
        }
      ]
    }
)
Successfully added user: {
        "user" : "<username>",
        "roles" : [
                {
                        "role" : "readWrite",
                        "db" : "<database>"
                }
        ]
}

> exit
bye

# 権限を付与した<database>を指定しないと権限不足で下記メッセージが表示されログインできない
# Error: Authentication failed.
root@c1f9c5d90bea:/# mongo <database> -u <username>
Enter password: 
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb

=========== 中略 ===========

        To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---

# 作成したユーザでログインすると対象のデータベースしか参照できない
> show dbs
<database>  0.000GB

# 対象のデータベースのコレクションは参照できる
> db.<collection>.find().pretty()
{
        "_id" : ObjectId("620bcde0f3a887a0d489a3f4"),
        "sample1" : "hoge",
        "sample2" : "fuga"
}

-技術的な話
-, , ,