MongoDBを使ってみる

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

AMです。

現在の業務では、NoSQLを使ったほうが良いという場面に遭遇したことはないのですが、自分が知らない技術を知りたいと思い、まずはNoSQLの勉強の第一歩として、記事を書きました!
内容は初歩中の初歩ですが、NoSQLという名前しか聞いたことがないよという方に、NoSQLとはどんなものか少しでも知っていただけると幸いです。

※前回の記事はこちら→ NoSQLを調べて使いたい

こちらの記事を書いた際に、KVS型か列指向型かを書くと言いましたが、葉っぱのマークが素敵なMongoDBを選択しました。
MongoDBはドキュメント指向型です。

MongoDBを使ってみる

【MongoDB設定】

<インストール>

使用する環境は、CentOS5.5です。

任意のフォルダでwgetします。
ちなみにこちらのサイトで、使用する環境に合わせてダウンロードできます。

wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel55-3.0.1.tgz

<ダウンロードしたファイルを展開>

tar xvfz

デフォルトのデータファイルの配置先ディレクトリは
/data/db
となるようです。
今回は素直にデフォルトの設定に従うようにします。

mkdir –p /data/db

<起動>

cd {解凍したフォルダ}
./bin/mongod

・・・ちょっと長い(;´Д`)
初回の起動のみ時間がかかるようです。

ログの最後にwaiting for connections on port~~と出れば成功です。
なお、上記ログ以降は、ユーザの接続を待っている状態となります。
なので、一度終了させ、バックグラウンドで起動させます。

code>touch /var/log/mongo.log
./bin/mongod --fork --logpath /var/log/mongodb.log

その後mongoコマンドで接続します。

./bin/mongo

【MongoDBを動かしてみる】

まずは、データベースを作成します。

use sample

使用しているデータベースを確認するにはdbというコマンドで確認できます。

db

続いてコレクションを作成します。コレクションとは、RDBMSでいうテーブルと考えてほぼ差し支えありません。

db.sample_coll.insert({ "key1" : "value1", "key2" : "value2" })

dbは現在使用中のデータベースを指します。
コレクション名はsample_collとなります。
コレクションだけを作るコマンドというものは存在せず、存在しないコレクション名に値をセットしようとすると、自動的に作成されます。
(今回だとinsertで各keyと値をセットしています)

なお以下のコマンドで、存在するデータベース名やコレクション名が確認できます。

show dbs
show collections

次はドキュメントの検索を行ってみます。
Insertとほぼ同じで、データベース名とコレクション名を指定して、findで検索します。

db.sample_coll.find()

これで現在のドキュメントの一覧が出てきます。
今はデータがひとつしかないので、ひとつしか表示されません。
insertでもう一つドキュメントを増やして確認してみましょう。

db.sample_coll.insert({ "key3" : "value3", "key4" : "value4" })
db.sample_coll.find()

結果

{ "_id" : ObjectId("英数字の羅列"), "key1" : "value1", "key2" : "value2" }
{ "_id" : ObjectId("英数字の羅列"), "key3" : "value3", "key4" : "value4" }

もちろん条件を絞って検索することもできます。

db.sample_coll.find({"key3":"value3"})

結果

{ "_id" : ObjectId("英数字の羅列"), "key3" : "value3", "key4" : "value4" }

フィールド名がkey3で値がvalue3の条件に一致するドキュメントを検索しています。

続いてはupdateを行ってみます。
同じような形で、データベース名.コレクション名.update()とします。
Updateの第一引数に、更新したいドキュメントの条件を、第二引数に更新したい内容を記載します。

今回は、”key1″ : “value1″のドキュメントに、フィールド名key5と値value5を追加します。

db.sample_coll.update({"key1":"value1"},{$set:{"key5":"value5"}})
db.sample_coll.find({"key1":"value1"})

結果

{ "_id" : ObjectId("数字の羅列"), "key1" : "value1", "key2" : "value2", "key5" : "value5" }

update の際に$setという修飾子を加えなければ、全上書きになってしまうので、注意です。

db.sample_coll.update({"key1":"value1"},{"key5":"value5"})
db.sample_coll.find()

結果

{ "_id" : ObjectId("数値の羅列({"key1":"value1"}のドキュメントと同じID)"), "key5" : "value5" }
{ "_id" : ObjectId("数値の羅列"), "key3" : "value3", "key4" : "value4" }

ここまでinsert,検索,updateときたので、削除にも触れておきましょう。

他と同じようにデータベース名.コレクション名.remove(削除条件)となります。

db.sample_coll.remove({"key3" : "value3"})

これでdb.sample_coll.find()などで検索すると、{“key3” : “value3”}の条件に一致したドキュメントが削除されていると思われます。

なお、removeに引数を指定しなかった場合は、全ドキュメントを削除します。
ただし、コレクションは残った(空のコレクション)状態になります。
コレクションごと削除したい場合は、

db.sample_coll.drop()

とすることで削除できます。

いかがでしたでしょうか。
普段RDBMSを利用している方でも特に難しい内容ではなかったと思われます。
これをきっかけにNoSQLについて触れる機会が増えれば幸いです。






広告システムについてのお問い合わせやご相談、パッケージ製品の詳細はこちらからどうぞ。
http://admage.jp/
アプリ計測SDK admage for Appのお問い合わせ・詳細はこちら。
http://apptizer.jp/

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

コメントを残す

*