macOS CatalinaにMongoDBをインストール
概要
MacにMongodbをインストールする。
手順
以下のコメントではだめだった
$ brew install mongodb ~~(省略)) Error: No available formula or cask with the name "mongodb". ==> Searching for a previously deleted formula (in the last month)... Error: No previously deleted formula found. ==> Searching for similarly named formulae... Error: No similarly named formulae found. ==> Searching taps... ==> Searching taps on GitHub... Error: No formulae found in taps.
mongodb-communityをインストール
この資料を参考にした
$ brew tap mongodb/brew Updating Homebrew... ==> Tapping mongodb/brew Cloning into '/usr/local/Homebrew/Library/Taps/mongodb/homebrew-brew'... remote: Enumerating objects: 97, done. remote: Counting objects: 100% (97/97), done. remote: Compressing objects: 100% (80/80), done. remote: Total 462 (delta 38), reused 42 (delta 17), pack-reused 365 Receiving objects: 100% (462/462), 101.47 KiB | 298.00 KiB/s, done. Resolving deltas: 100% (207/207), done. Tapped 11 formulae (39 files, 171.5KB). $ $ brew install mongodb-community Updating Homebrew... ==> Installing mongodb-community from mongodb/brew ==> Downloading https://fastdl.mongodb.org/tools/db/mongodb-database-tools-macos-x86_64-100.2.0.zip ######################################################################## 100.0% ==> Downloading https://fastdl.mongodb.org/osx/mongodb-macos-x86_64-4.4.1.tgz ######################################################################## 100.0% ==> Installing dependencies for mongodb/brew/mongodb-community: mongodb-database-tools ==> Installing mongodb/brew/mongodb-community dependency: mongodb-database-tools 🍺 /usr/local/Cellar/mongodb-database-tools/100.2.0: 13 files, 172.9MB, built in 4 seconds ==> Installing mongodb/brew/mongodb-community ==> Caveats To have launchd start mongodb/brew/mongodb-community now and restart at login: brew services start mongodb/brew/mongodb-community Or, if you don't want/need a background service you can just run: mongod --config /usr/local/etc/mongod.conf ==> Summary 🍺 /usr/local/Cellar/mongodb-community/4.4.1: 11 files, 136.8MB, built in 3 seconds ==> Caveats ==> mongodb-community To have launchd start mongodb/brew/mongodb-community now and restart at login: brew services start mongodb/brew/mongodb-community Or, if you don't want/need a background service you can just run: mongod --config /usr/local/etc/mongod.conf
以下のファイルが作成されるということだ。
設定ファイル(/usr/local/etc/mongod.conf)
ログディレクトリパス(/usr/local/var/log/mongodb)
データディレクトリパス(/usr/local/var/mongodb)
$ ls -ld /usr/local/etc/mongod.conf /usr/local/var/log/mongodb /usr/local/var/mongodb -rw-r--r-- 1 liu admin 161 10 25 11:52 /usr/local/etc/mongod.conf drwxr-xr-x 2 liu admin 64 10 25 11:52 /usr/local/var/log/mongodb drwxr-xr-x 2 liu admin 64 10 25 11:52 /usr/local/var/mongodb
設定ファイルの内容
systemLog: destination: file path: /usr/local/var/log/mongodb/mongo.log logAppend: true storage: dbPath: /usr/local/var/mongodb net: bindIp: 127.0.0.1
バージョンを確認
$ mongod --version db version v4.4.1 Build Info: { "version": "4.4.1", "gitVersion": "ad91a93a5a31e175f5cbf8c69561e788bbc55ce1", "modules": [], "allocator": "system", "environment": { "distarch": "x86_64", "target_arch": "x86_64" } }
2020/10月時点で最新の 4.4.1 である。
起動と停止
mongdbのバックグランドプロセスを自動起動させたい場合は
$ brew services start mongodb-community
自動起動を停止する場合は
$ brew services stop mongodb-community
手動で起動したい場合は、設定ファイルを指定して起動を行う(以下はバックグランドで起動させる場合)
$ mongod --config /usr/local/etc/mongod.conf & [1] 5301
手動起動したmongodbを停止する場合は、Ctrl + C で止めるか、バックグランド起動した場合は、$ fg
でフォアグランドにしてからCtrl + Cで止めればいい。
mongodbへ接続
mondodbを起動させた状態で接続するには
$ mongo
DB操作
DB確認
> show dbs admin 0.000GB config 0.000GB local 0.000GB
mongodbでのテーブルと行の概念
RDB | mongodb |
---|---|
テーブル | コレクション |
行 | ドキュメント |
DB作成
> use test_db switched to db test_db
test_db が存在するならそのdbに接続し、存在しなければ新しく作成する。
接続中のdbを表示するには
> db test_db
dbを作成しただけでは、show dbs
コマンドでは追加されない
>show dbs admin 0.000GB config 0.000GB local 0.000GB
追加するには、コレクションを作成する必要がある(下の例では vuln というコレクションを作成した)
db.createCollection('vuln') { "ok" : 1 } > show dbs admin 0.000GB config 0.000GB local 0.000GB test_db 0.000GB
ドキュメントの作成
mongodbでは、列名やデータ型などを先にきめてから行を追加することはない。
1件のドキュメントを作成するには inserOne コマンドを使う。
> db.vuln({ name: "Apache Struts 2の脆弱性", level: "S0", limit_date: "2020-12-31"}) { "acknowledged" : true, "insertedId" : ObjectId("5f954c22051b138e6af85465") }
insertOneでドキュメントを作成する時、もし vuln コレクションが存在しない場合、その時に一緒に作成してくれる(便利!)。
作成したドキュメントを確認するには
> db.vuln.find() { "_id" : ObjectId("5f954d22051b138e6af85466"), "name" : "Apache Struts 2の脆弱性", "level" : "S0", "limit_date" : "2020-12-31" }
もう1つを作成する
> db.vuln.insertOne({ name: "ATS DDoS脆弱性", level: "S1", limit_date: "2021-01-31"}) { "acknowledged" : true, "insertedId" : ObjectId("5f95571d051b138e6af85467") } > db.vuln.find() { "_id" : ObjectId("5f954d22051b138e6af85466"), "name" : "Apache Struts 2の脆弱性", "level" : "S0", "limit_date" : "2020-12-31" } { "_id" : ObjectId("5f95571d051b138e6af85467"), "name" : "ATS DDoS脆弱性", "level" : "S1", "limit_date" : "2021-01-31" }
find()で確認する内容をきれいにしたい場合は、pretty() を使う。
> db.vuln.find().pretty() { "_id" : ObjectId("5f954d22051b138e6af85466"), "name" : "Apache Struts 2の脆弱性", "level" : "S0", "limit_date" : "2020-12-31" } { "_id" : ObjectId("5f95571d051b138e6af85467"), "name" : "ATS DDoS脆弱性", "level" : "S1", "limit_date" : "2021-01-31" }
まさにjson形式。
ドキュメントを探す
2つの方法があり、1つはObjectIdを使うこと、もう1つはキーとその値を使って探すことができる。
> db.vuln.find(ObjectId("5f954d22051b138e6af85466")).pretty() { "_id" : ObjectId("5f954d22051b138e6af85466"), "name" : "Apache Struts 2の脆弱性", "level" : "S0", "limit_date" : "2020-12-31" } > db.vuln.find({"name": "Apache Struts 2の脆弱性"}).pretty() { "_id" : ObjectId("5f954d22051b138e6af85466"), "name" : "Apache Struts 2の脆弱性", "level" : "S0", "limit_date" : "2020-12-31" }
ドキュメントの更新
Apache Strusts 2の脆弱性のレベルをS1に更新したい、
> db.vuln.update({"name": "Apache Struts 2の脆弱性"}, {$set: {"level": "S1"}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.vuln.find().pretty() { "_id" : ObjectId("5f954d22051b138e6af85466"), "name" : "Apache Struts 2の脆弱性", "level" : "S1", "limit_date" : "2020-12-31" } { "_id" : ObjectId("5f95571d051b138e6af85467"), "name" : "ATS DDoS脆弱性", "level" : "S1", "limit_date" : "2021-01-31" } #### ドキュメントの削除 1件削除するにはdeleteOneを使う。
db.vuln.deleteOne({"name" : "ATS DDoS脆弱性"}) { "acknowledged" : true, "deletedCount" : 1 }
db.vuln.find().pretty() { "_id" : ObjectId("5f954d22051b138e6af85466"), "name" : "Apache Struts 2の脆弱性", "level" : "S1", "limit_date" : "2020-12-31" }
#### コレクション一覧
show collections vuln
#### コレクションの削除 drop()コマンドを使う。
db.vuln.drop() true
コレクションがなくなると、先に作成したtest_dbが表示されなくなった。
show dbs admin 0.000GB config 0.000GB local 0.000GB
#### DBの削除
use test_db switched to db test_db db.dropDatabase() { "dropped" : "test_db", "ok" : 1 }
### まとめ mongodbをMacにインストールし、一番初歩的な操作方法を体験した。使った感想としては、DBのスキーマに気にする必要がなく、json形式なドキュメントであれば、簡単に追加することができた。しかし、手打ちでDB操作コマンドを打つには、ちょっと慣れが必要と感じた。 大量な構造化されたjsonデータを追加し、表示させるような単純な動作(Webスクレイピング等)であれば、mongodbは手軽に利用できていいのではないかと思った。 ### 参考資料 - [https://reffect.co.jp/windows/mac-mongodb-install:title] - [https://qastack.jp/programming/58283257/mongodb-cant-find-data-directory-after-upgrading-to-mac-os-10-15-catalina:title]