目的:MongoDBを使い、RubyプログラムからCRUD操作を行ってみる。
実施環境:
OS:Windows8.1
Ruby:v2.2.2
mongo(gems):v2.0.4
bson(gems):v3.0.3
MongoDB:mongodb-win32-x86_64-2008plus-ssl-3.0.3-signed
ディレクトリ構造:
作業ディレクトリ
|-mongo_main.rb(rubyファイル)
|
|-db(ディレクトリ)
|-MongoDBの作成するファイルができる
目次:
- MongoDBの起動
- RubyGems(mongo)のインストール
- Rubyプログラムの作成
- 実行
MongoDBはあらかじめインストールし環境変数も設定しておいて下さい。
以下に参考なるサイトのリンクを貼っておきます。
(インストーラーを使用するのならポチポチしていくだけなので楽です。環境変数通らんけど・・・)
Qiita - MongoDBのインストール
Webエンジニアブログ - MongoDBをWindowsにインストール
1.MongoDBの起動
1.1
コマンドプロンプトを起動し、以下のコマンドを実行する。
コマンド:mongod --dbpath ファイルパス\作業ディレクトリ\db
※ログも指定できるがこの記事ではやらない。
1.2(実施しなくても問題ありません。)
蛇足ですが、
コマンドプロンプトからMongoDBを操作したいのであれば、
1.1で起動しているコマンドプロンプトとは別にコマンドプロンプトをもう一つ起動し、
以下のコマンドを実行する。
コマンド:mongo
これで、操作用のコマンドプロンプトが用意できる。
また、簡単な操作方法を以下に記述する。
使用中のDBを確認したい場合。
コマンド:db
DBの作成もしくは作成済みのDBへ接続する場合。
コマンド:use DB名
コレクションを作成したい場合。
コマンド:db.createCollection("生成するコレクション名")
コレクションにドキュメントを挿入したい場合。
コマンド:db.コレクション名.insert({ name: "hoge", title: "hoge", comment: "hogehoge" })
上記コマンドはあくまで例です。
柔軟なコレクションのドキュメントが生成できるのが特徴ですので、
途中からコレクションのドキュメント項目を増やすこともできます。
(データが肥大化するのでおすすめできませんが・・・)
コレクションの検索をしたい場合。(全件検索)
コマンド:db.コレクション名.find()
2.RubyGems(mongo)のインストール
2.1
Rubyのコマンドプロンプトを起動し、以下のコマンドを実行する。
コマンド:gem install mongo
bson_ext(gems)も入れた方がいいのだが、今回はインストールしない。
bson_extのgemsは高速化のために入れると良いらしい。
(2015/05/25時点の話です)
おそらくエラーが出ると思うので回避方法のリンク貼っておきます。(英語ですが・・・)
私の場合は、devkitにヘッダファイルとフォルダを作成する形で回避しました。
http://stackoverflow.com/questions/26092541/windows-rails-error-installing-bson-ext
2.2
gemの一覧にインストールしたか確認する。
コマンド:gem list
3.Rubyプログラムの作成
3.1
ソースコードは以下の通り作成した。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# encoding: utf-8 | |
# File Name: mongo_main.rb | |
# Create Day is 2015/05/25 | |
# Last Update Day is 2015/05/25 | |
# Require List | |
require 'mongo' | |
puts "MongoDB test!!" | |
puts "DB接続" | |
db = Mongo::Client.new(["127.0.0.1:27017"], :database => 'sinatra_bbs') | |
collection = db[:comments] | |
# CRUD操作例 | |
# 作成(C) | |
puts "ドキュメント挿入(一つ)" | |
puts collection.insert_one({:name => "darui", :title => "blogger", :comment => "darui"}) | |
# 取得(R) | |
puts "ドキュメント取得(全件)" | |
collection.find.each do |doc| | |
puts doc | |
end | |
# 更新(U) | |
# $~の部分は色々あるようだ・・・一覧が見つからない | |
puts "ドキュメント更新(複数)" | |
collection.find(:name => "darui").update_many("$set" => {:comment => "darui@apprentice"}) | |
collection.find.each do |doc| | |
puts doc | |
end | |
# 削除(D) | |
puts "ドキュメント削除(複数)" | |
collection.find(:name => "darui").delete_many | |
collection.find.each do |doc| | |
puts doc | |
end |
4.実行
4.1
以下のコマンドを実行する。
コマンド:ruby mongo_main.rb
一連のMongoDBのコマンドと実行結果。
また、Rubyの出力が出てくると思います。
(長くてちょっと貼り付けると見辛くなってしまう・・・)
一部の内容を抜粋して貼ります。
ドキュメントを作成して取得した内容の表示
{"_id"=><BSON::ObjectId:0x2237260 data=5562d2a754616b11a0000000>, "name"=>"darui", "title"=>"blogger", "comment"=>"darui"}
ドキュメントを更新して取得した内容の表示
{"_id"=><BSON::ObjectId:0x20894580 data=5562d2a754616b11a0000000>, "name"=>"darui", "title"=>"blogger", "comment"=>"darui@apprentice"}
削除後はドキュメントがないはずです。
以上!!
以下、参考にさせて頂いたサイト様方
本家のドライバチュートリアル - Ruby Driver Tutorial (2.0.0)
本家のドライバチュートリアル - Ruby Driver Tutorial (2.0.0)
管理人の独り言
掲示板に使う予定なので、せっかくだからNoSQLを使ってみる。
本家のドキュメントがかなり親切設計で読みやすい英語だったので、
管理人の英語アレルギーが少ししか発症しませんでした。
大体ドキュメントを見ればどうにかなるかと思います。
また、「MongoDBの薄い本」を見れば、日本語で基礎を習得できると思います。
下記に「MongoDBの薄い本」のリンクを貼っておきます。(ちなみにPDFです)
http://www.cuspy.org/diary/2012-04-17/the-little-mongodb-book-ja.pdf
2系のドライバ(Gem)を使って日本語で書かれてる記事の少ないこと、少ないこと・・・
エラー祭りでした・・・一行ずつ直していったのは久々ですwww
たまには悪くない!
掲示板に使う予定なので、せっかくだからNoSQLを使ってみる。
本家のドキュメントがかなり親切設計で読みやすい英語だったので、
管理人の英語アレルギーが少ししか発症しませんでした。
大体ドキュメントを見ればどうにかなるかと思います。
また、「MongoDBの薄い本」を見れば、日本語で基礎を習得できると思います。
下記に「MongoDBの薄い本」のリンクを貼っておきます。(ちなみにPDFです)
http://www.cuspy.org/diary/2012-04-17/the-little-mongodb-book-ja.pdf
2系のドライバ(Gem)を使って日本語で書かれてる記事の少ないこと、少ないこと・・・
エラー祭りでした・・・一行ずつ直していったのは久々ですwww
たまには悪くない!