はじめに
これまで、主にMySQLを使ってきたので、ガッツとRDBに染まっています。
最近流行り(ちょっと遅いが)のNoSQLも触ってみようという事で、MongoDBを触ってみようと思います。
きっかけとしては、最近node.jsも触っていて、その時にmongodbも触る機会があったので、今回MongoDBがどんなものか、簡単な使い方をメモ程度にまとめてみました。
インストールから接続まで
わたしはMacを使っていたので、公式の手順に従ってインストールしました。
インストールが完了し、パスが通ったら、、
$ sudo mongod
Password:
2017-09-13T22:00:54.175+0900 I CONTROL [initandlisten] MongoDB starting : pid=51720 port=27017 dbpath=/data/db 64-bit host=********
....
こんな感じでmongoがデーモンとして立ち上がります。
ターミナルから触ってみる
mongodが立ち上がっていれば、mongo
と打てばターミナルから接続出来ます。
$ mongo
... 色々と接続情報出る ...
> show dbs
admin 0.000GB
local 0.000GB
こんな感じです。
各種操作方法
コマンド | 説明 | 備考 |
---|---|---|
show dbs | データベース一覧の表示 | - |
use [DB名] | データベースを切り替える | 存在しないDB名を入力すると、DBが作成されます(ただ、collectionがないとshow dbs には表示されない |
db.dropDatabase() | データベースの削除 | 今useしているデータベースを削除します(引数指定とかではないので結構怖い) |
show collections | コレクション一覧の表示 | collectionが、RDSで言う所のテーブルにあたります |
db.createCollection('[collection名]') | コレクション作成 | - |
db.[collection名].drop() | コレクションの削除 | - |
db.[collection名].insert([オブジェクト]) | コレクションにデータを挿入する | - |
db.[collection名].find() | コレクションの中身を全件取得 | RDBのselect |
db.[collection名].update({条件}, { $set: {更新内容}}) | 条件で指定した内容を更新する | ただし最初の1件のみ |
db.[collection名].update({条件}, { $set: {更新内容}}, {multi:true) | 条件で指定した内容を更新する | この場合は全て更新する |
db.[collection名].remove( {条件} ) | 条件にマッチするものを全て削除 | 削除の場合はmultiをつけなくても全て消える |
一通り触って試してみる
-- まずはデータベース一覧を表示してみます
> show dbs;
admin 0.000GB
local 0.000GB
-- これでtest_dbが作られます
> use test_db
switched to db test_db
-- まだcollectionが存在しないので、データベース一覧には出ません
> show dbs
admin 0.000GB
local 0.000GB
-- collectionsを作ってみます
> db.createCollection('language')
{ "ok" : 1 }
> show collections
language
-- collectionが存在するとデータベース一覧に表示されます
> show dbs
admin 0.000GB
local 0.000GB
test_db 0.000GB
-- collectionにいくつかデータを入れてみます
> db.test_db.insert({name: 'yamada', lang: 'ja'});
WriteResult({ "nInserted" : 1 })
> db.test_db.insert({name: 'okamoto', lang: 'ja'});
WriteResult({ "nInserted" : 1 })
> db.test_db.insert({name: 'saito', lang: 'ja'});
WriteResult({ "nInserted" : 1 })
> db.test_db.insert({name: 'saito', lang: 'en'});
WriteResult({ "nInserted" : 1 })
> db.test_db.insert({name: 'yamada', lang: 'ru'});
WriteResult({ "nInserted" : 1 })
-- collectionからデータを取得します
> db.test_db.find()
{ "_id" : ObjectId("59b9307c28b8ae102fb50d3d"), "name" : "yamada", "lang" : "ja" }
{ "_id" : ObjectId("59b9307c28b8ae102fb50d3e"), "name" : "okamoto", "lang" : "ja" }
{ "_id" : ObjectId("59b9307c28b8ae102fb50d3f"), "name" : "saito", "lang" : "ja" }
{ "_id" : ObjectId("59b9307c28b8ae102fb50d40"), "name" : "saito", "lang" : "en" }
{ "_id" : ObjectId("59b9307c28b8ae102fb50d41"), "name" : "yamada", "lang" : "ru" }
-- yamada君のlangをchに更新してみます
-- findするとわかりますが、最初のyamada君しかchに更新されていません
> db.test_db.update({name: 'yamada'}, { $set: {lang: 'ch'}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test_db.find()
{ "_id" : ObjectId("59b9307c28b8ae102fb50d3d"), "name" : "yamada", "lang" : "ch" }
{ "_id" : ObjectId("59b9307c28b8ae102fb50d3e"), "name" : "okamoto", "lang" : "ja" }
{ "_id" : ObjectId("59b9307c28b8ae102fb50d3f"), "name" : "saito", "lang" : "ja" }
{ "_id" : ObjectId("59b9307c28b8ae102fb50d40"), "name" : "saito", "lang" : "en" }
{ "_id" : ObjectId("59b9307c28b8ae102fb50d41"), "name" : "yamada", "lang" : "ru" }
-- yamada君のlangを全てchに更新してみます(multiを使います)
-- 最初と最後の両方が更新されました
> db.test_db.update({name: 'yamada'}, { $set: {lang: 'ch'}}, {multi: true});
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 1 })
> db.test_db.find()
{ "_id" : ObjectId("59b9307c28b8ae102fb50d3d"), "name" : "yamada", "lang" : "ch" }
{ "_id" : ObjectId("59b9307c28b8ae102fb50d3e"), "name" : "okamoto", "lang" : "ja" }
{ "_id" : ObjectId("59b9307c28b8ae102fb50d3f"), "name" : "saito", "lang" : "ja" }
{ "_id" : ObjectId("59b9307c28b8ae102fb50d40"), "name" : "saito", "lang" : "en" }
{ "_id" : ObjectId("59b9307c28b8ae102fb50d41"), "name" : "yamada", "lang" : "ch" }
-- collectionからsaitoさんのデータを消してみます。
-- この場合はmultiを指定せずとも全て消えました
> db.test_db.remove( {name: 'saito'} )
WriteResult({ "nRemoved" : 2 })
> db.test_db.find()
{ "_id" : ObjectId("59b9307c28b8ae102fb50d3d"), "name" : "yamada", "lang" : "ch" }
{ "_id" : ObjectId("59b9307c28b8ae102fb50d3e"), "name" : "okamoto", "lang" : "ja" }
{ "_id" : ObjectId("59b9307c28b8ae102fb50d41"), "name" : "yamada", "lang" : "ch" }
-- 最後にデータデータを消してみます
> db.dropDatabase()
{ "dropped" : "test_db", "ok" : 1 }
> show dbs
admin 0.000GB
local 0.000GB
ざっくりと触りだけですが、次回はこの基礎知識を活かしてよりnode.jsからmongoをゴリゴリ触っていきます。