データベースにはRDBMSとRDBMS以外のNoSQLがあるが、NoSQLは今まで使ったことがなかったので使ってみた。
NoSQLデータベースの中でも比較的人気なMongoDBを導入した。
NoSQLとは
RDBMSがリレーショナルモデルで管理するデータベースであるのに対して、NoSQLはリレーショナルモデルを用いない。
NoSQLは以下の分類に分けられる。
- キー・バリュー型: キーとバリューだけの単純な構造のデータベース。
- カラム指向型: キー・バリューがカラムによってグループ化されているデータベース。
- ドキュメント指向型: JSONやXMLといったドキュメントで管理するデータベース。
- グラフ指向型: ノード間の関係を管理するデータベース。
MongoDBとは
MongoDBはドキュメント指向型に分類され、BSON(バイナリ型JSON)と呼ばれるデータフォーマットを利用している。
複数のBSONはコレクションと呼ばれる単位で管理される。
扱うデータの種別によって、RDBMSに比べCRUD処理を高速に行えるメリットがある。
環境
- MongoDB v4.4.13
導入
インストール
公式のインストール手順に沿ってインストールしていく。
$ brew tap mongodb/brew
$ brew update
$ brew install [email protected]
パスを通す。
$ echo 'export PATH="/usr/local/opt/[email protected]/bin:$PATH"' >> ~/.zshrc
Macのシステム起動時に自動起動させたい場合は、Homebrewのサービスに設定しておく。
$ brew services start mongodb/brew/[email protected]
使い方
シェルの起動
$ mongo
MongoDB shell version v4.4.13
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("hoge") }
MongoDB server version: 4.4.13
>
MongoDBはデフォルトポート27017で立ち上がる。
データベースの作成/切り替え
> use blog
switched to db blog
データベースの状態
> db.stats()
{
"db" : "blog",
"collections" : 0,
"views" : 0,
"objects" : 0,
"avgObjSize" : 0,
"dataSize" : 0,
"storageSize" : 0,
"totalSize" : 0,
"indexes" : 0,
"indexSize" : 0,
"scaleFactor" : 1,
"fileSize" : 0,
"fsUsedSize" : 0,
"fsTotalSize" : 0,
"ok" : 1
}
コレクション(テーブル)作成
> db.createCollection('posts');
{ "ok" : 1 }
ドキュメント(レコード)追加
> db.posts.insert({ title: 'テスト記事', text: 'テスト記事の本文' });
WriteResult({ "nInserted" : 1 })
ドキュメント(レコード)取得
MongoDBでは、_idが主キーとして扱われる。
> db.posts.find({_id: ObjectId("626533b0dda7edc966d8f1e0")});
{ "_id" : ObjectId("626533b0dda7edc966d8f1e0"), "title" : "テスト記事", "text" : "テスト記事の本文" }
ドキュメント(レコード)更新
updateの第1引数が検索条件、第2引数が更新内容となる。
> db.posts.update({_id: ObjectId("626533b0dda7edc966d8f1e0")}, { title: 'テスト記事_更新', text: 'テスト記事の本文_更新' });
ドキュメント(レコード)削除
> db.posts.remove({_id: ObjectId("626533b0dda7edc966d8f1e0")});