MacにNoSQLのMongoDBを入れて使ってみる
日付 タグ mongodb カテゴリ others目次
MongoDBのインストール
普段RDBのMySQLを業務で良く使っているが、NoSQLに関しては触ったことあるのはRedisだけ。 Node.jsを勉強していて、DBとしてMongoDBを使うと結構便利そうだというのがわかったので、 NoSQLとして最近需要が高まっているMongoDBをMacにインストールして使ってみる。
https://www.mongodb.com/ - MongoDB
NoSQLとはNot Only SQLという意味だそうだ。それだけにSQL命令文などは利用ができない。 また、トランザクションの一貫性を勝手に保証してくれるRDBとは違ってそういったサポートがない。 しかし、その分、データへのアクセスが軽い。
NoSQLには主に以下のようなものがある。
- キーバリュー型
- 基本的にはKey, Valueの単純なペアで記録されるもの
- Redisはこのタイプになる
- ドキュメント指向型
- XMLやJSONといったスキーマレスでデータ構造が受難なもの
- 今回インストールするMongoDBはこのタイプ
- ソート済みカラム指向型
- キーバリューの拡張で複数のバリューを持つもの
- Apache HBaseなどがこのタイプ
最近のWEBサービス等ではJSONで結果を返したりすることが多いので、JSONをそのまま保存して突っ込めるMongoDBが利用される場面が増えているようだ。
HomebrewでMongoDBのインストール
まずはTapのインストール
$ brew tap mongodb/brew
そして、brewでMongoDBのインストール
$ brew install mongodb-community
正しくインストールできたか、バージョンをとりあえず確認してみる。
$ 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"
}
}
デフォルトでログやデータがどこに保存されるかの確認をすると、
$ cat /usr/local/etc/mongod.conf
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
以上の場所に保存されることがわかる。
インストールされたMongoDBを使ってみる
MongoDBサービスを起動させておく
$ brew services start mongodb-community
その上で、MongoDBに接続。
$ mongo
とりあえずhelpコマンドでどんなコマンドあるかちょっとチェック
> help
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce
show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
show logs show the accessible logger names
show log [name] prints out the last segment of log in memory, 'global' is default
use <db_name> set current database
db.mycoll.find() list objects in collection mycoll
db.mycoll.find( { a : 1 } ) list objects in mycoll where a == 1
it result of the last line evaluated; use to further iterate
DBQuery.shellBatchSize = x set default number of items to display on shell
exit quit the mongo shell
MongoDBにもMySQLのようにデータベースをチェックするコマンドがあるので見てみる
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
これらはデフォルトで用意されているデータベース。 ではデータベースを作成して追加してみる。
> use test
switched to db test
実際に追加されるには、コレクション(MySQLだとテーブルにあたる)を生成する必要があるので、コレクションとして「notes」を追加
> db.createCollection("notes")
{ "ok" : 1 }
今しがたまでやった操作でどうなったか状態を確認
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
test 0.000GB
> db
test
> show collections
notes
データベースとして「test」が追加され、現在選択のデータベース「test」にはコレクションとして「notes」が追加されていることが確認できた。
では実際のデータを追加してみよう。
> db.notes.insertOne({ title: "Today", message: "Hello Today"})
{
"acknowledged" : true,
"insertedId" : ObjectId("5fb6676c6099244c572e405f")
}
ここで本当に追加できたかコレクションを確認してみよう。
> db.notes.find()
{ "_id" : ObjectId("5fb6676c6099244c572e405f"), "title" : "Today", "message" : "Hello Today" }
問題なくデータが追加されている。
さらにデータをもう1つ追加してコレクションを見てみる。
> db.notes.insertOne({ title: "Tomorrow", message: "Hello Tomorrow"})
{
"acknowledged" : true,
"insertedId" : ObjectId("5fb667736099244c572e4060")
}
> db.notes.find()
{ "_id" : ObjectId("5fb6676c6099244c572e405f"), "title" : "Today", "message" : "Hello Today" }
{ "_id" : ObjectId("5fb667736099244c572e4060"), "title" : "Tomorrow", "message" : "Hello Tomorrow" }
無事データが追加できた。
1つ目のデータをキーを指定してデータを削除してみる。
> db.notes.deleteOne({ title : "Today" })
{ "acknowledged" : true, "deletedCount" : 1 }
> db.notes.find()
{ "_id" : ObjectId("5fb667736099244c572e4060"), "title" : "Tomorrow", "message" : "Hello Tomorrow" }
1つ目に入っていたデータが消えていることが確認できた。
データの更新はどうやるのか。
> > db.notes.update({ title : "Tomorrow" },{$set: { title : "Yesterday", message :"Hello Yesterday" }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.notes.find()
{ "_id" : ObjectId("5fb667736099244c572e4060"), "title" : "Yesterday", "message" : "Hello Yesterday" }
データの更新がされた。
データベースにもう1つコレクション「users」を追加した後、最初に作ったコレクション「notes」を削除してみる。
> db.createCollection("users")
{ "ok" : 1 }
> show collections
notes
users
> db.notes.drop()
true
> show collections
users
「users」を追加した後に「notes」を削除したので、残ったのは「users」のみ。
さらにテストで使ったデータベース「test」を削除してみる。
> db.dropDatabase()
{ "dropped" : "test", "ok" : 1 }
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
問題なく消えたので、exitで終了しよう。
> exit
bye
あとは立ち上げておいたMongoDBのサービスを停止。
$ brew services stop mongodb-community
以上、一連の操作でMongoDBの簡単な使い方を見てきた。
Node.jsを勉強中で、いろいろサンプルアプリ作りながら学んでいるので、Node.jsとの絡みでMongoDBも積極的に今後は利用していってみたいと思っている。