MongoDB
MongoDB:開発者向けデータプラットフォーム | MongoDB: ドキュメント指向型のNoSQLデータベース管理システム。
MongoDBを使って、データベースを更新するために何が必要かをいくつか確認してみる。
MongoDBのdockerコンテナの起動
Ubuntu22.04だと純正apt
だと入らないようだったので、せっかくならと言うことでMongoDBのdockerコンテナで実行してみることにする。
docker
のインストールはDocker備忘録 #初心者 - Qiitaで済んでいる状態。
docker run -d \
--name mongodb \
-p 27017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=secret \
mongo
で最新版のMongoDBがdockerで走る。
確認のためにsudo docker ps
で
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d25ac999e428 mongo "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:27017->27017/tcp, [::]:27017->27017/tcp mongodb
が表示され、走っていることが確認できる。
docker exec -it mongodb mongosh -u admin -p secret
でコンテナに入ると
Current Mongosh Log ID: 67debf3155d7b2192b6b140a
Connecting to: mongodb://<credentials>@127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.4.2
Using MongoDB: 8.0.5
Using Mongosh: 2.4.2
For mongosh info see: https://www.mongodb.com/docs/mongodb-shell/
To help improve our products, anonymous usage data is collected and sent to MongoDB periodically (https://www.mongodb.com/legal/privacy-policy).
You can opt-out by running the disableTelemetry() command.
------
The server generated these startup warnings when booting
2025-03-22T09:40:29.462+00:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
2025-03-22T09:40:30.121+00:00: For customers running the current memory allocator, we suggest changing the contents of the following sysfsFile
2025-03-22T09:40:30.121+00:00: For customers running the current memory allocator, we suggest changing the contents of the following sysfsFile
2025-03-22T09:40:30.121+00:00: We suggest setting the contents of sysfsFile to 0.
2025-03-22T09:40:30.121+00:00: vm.max_map_count is too low
2025-03-22T09:40:30.121+00:00: We suggest setting swappiness to 0 or 1, as swapping can cause performance problems.
------
test>
あるいはsudo docker exec -it mongodb bash
で通常のコンソールで入った後mongosh -u admin -p secret
で同様にコンテナ内でmongosh
が起動する。
一般ユーザーの追加
admin
でmongosh
に入り、use mydb
で、以下のようにdbにユーザーとパスワードを追加:
mydb> use mydb // ← 対象のデータベースに切り替え この時点でmydbは存在していなくても構わない
switched to db mydb
mydb> db.createUser({ // この時点でmydbにデータがなくても構わない
user: "newuser",
pwd: "yourpassword", //要変更
roles: [{ role: "readWrite", db: "mydb" }]
})
{ ok: 1 }
mydb>
mongosh
からログアウト後に
mongosh -u newuser -p yourpassword --authenticationDatabase mydb
で、mydbが操作できるシェルに入れる。
test> use mydb
switched to db mydb
mydb> show collections
//データが何もないのでブランク
mydb> show dbs
//データが何もないのでブランク
mydb> db.sample.insertOne({ name: "Alice", age: 30 }) //データを追加
{
acknowledged: true,
insertedId: ObjectId('67decdd70389095b266b140b')
}
mydb> db.sample.find()
[
{ _id: ObjectId('67decdd70389095b266b140b'), name: 'Alice', age: 30 }
]
mydb> show dbs
mydb 8.00 KiB
mydb> show collections
sample
mydb> db.sample.find().pretty()
[
{ _id: ObjectId('67decdd70389095b266b140b'), name: 'Alice', age: 30 }
]
mydb> db.sample.countDocuments()
1
mydb> db.sample.findOne()
{ _id: ObjectId('67decdd70389095b266b140b'), name: 'Alice', age: 30 }
MongoDBでは、RDBの「TABLE」に相当するものがと「collection」と呼ばれている。
MongoDB CompassをリモートからMongoDBに繋げて操作する
MongoDBの公式GUIをMongoDB Compass Download (GUI) | MongoDBからダウンロードする。
手元のホスト(shinohara-mac(仮名))で、MongoDB Compassを起動。
左側のペインにあるCONECTIONSの右にある+
をクリックして、接続先の情報を記入する。
- Name: わかりやすい名前を適当に
- Advanced Connection Optionsをクリック
- General
- Connection String Scheme: mongodb
- Host: 192.168.xxx.yyy:27017
- Authentfication
- Username: newuser
- Password: yourpassword(要変更)
- Authentificationdatabase: mydb
あたりをデフォルトから変えて入力すればOKのはず。これでSave&Connect
をクリックするとDBにアクセスできる。
- General
コマンドまとめ
mongoDBは基本的に、DB毎に何かしらの操作が可能なuserが付属している という建て付けのよう。なので、userの存在の前にDBが必要となる。
use mydb // mydbに以下のuserを追加する
db.createUser({
user: "myuser",
pwd: "mypassword",
roles: [
{ role: "readWrite", db: "mydb" }, //mydbには "readWrite"権限を
{ role: "read", db: "otherdb" } // otherdbには"read"権限を
]
})
role
の選択肢
DBレベルでのrole
(もっと広い範囲での権限に影響するrole
もあるらしい)
ロール名 | 説明 |
---|---|
read |
読み取り専用。ドキュメントの検索のみ可能。 |
readWrite |
読み取り+書き込みが可能(挿入、更新、削除など)。 |
dbAdmin |
インデックス作成、コレクションの情報取得などが可能。 |
userAdmin |
ユーザーの作成・削除が可能(ただしそのDB内に限る)。 |
dbOwner |
上記すべての権限を持つ(readWrite + dbAdmin + userAdmin)。 |
enableSharding |
シャーディングの有効化が可能(そのDBに対して)。 |