LoginSignup
6
12

More than 5 years have passed since last update.

はじめてのMongoDB

Posted at

はじめに

これまで、主に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をゴリゴリ触っていきます。

6
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
12