タイトル:MongoDBで取得したドキュメントをHashに変換して利用する。
目的:MongoDBから取得したデータ(ドキュメント)を、RubyのHashに変換してValueをコンソール表示する。
実施環境:
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の作成するファイルができる
目次:
- Rubyプログラムの作成
- 説明&実行
MongoDBの起動やmongo(gems)のインストールは以前記事を書いているので、
そちらを参考にして頂ければ分かりやすいと思います。
また、ソースコードも以前の記事にあるものに追記したものになります。
1.Rubyプログラムの作成
1.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_main02.rb | |
# Create Day is 2015/05/26 | |
# Last Update Day is 2015/05/26 | |
# 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) | |
# :nameが"darui"を検索条件に指定 | |
hash_array = Array.new | |
puts "ドキュメント取得" | |
collection.find(:name => "darui").each do |doc| | |
puts doc | |
# ドキュメントをHashに変換して配列へ格納している | |
hash_array.push(doc.to_hash) | |
end | |
# Hash配列の内容を表示 | |
hash_array.each do |element| | |
puts "name = " + element[:name] | |
puts "title = " + element[:title] | |
puts "comment = " + element[:comment] | |
end | |
# 更新(U) | |
# 更新修飾子($~)は以下を参考にすると良い。 | |
# URL: http://api.mongodb.org/wiki/current/Updating.html | |
puts "ドキュメント更新(複数)" | |
collection.find(:name => "darui").update_many("$set" => {:comment => "darui@apprentice"}) | |
collection.find(:name => "darui").each do |doc| | |
puts doc | |
end | |
# 削除(D) | |
puts "ドキュメント削除(複数)" | |
collection.find(:name => "darui").delete_many | |
collection.find(:name => "darui").each do |doc| | |
puts doc | |
end |
2.説明&実行
2.1
取得したドキュメントをto_hashメソッドでハッシュにしただけです。
取得するデータが複数の時を考えて配列に格納しています。
※MongoDBから取得したデータはBSONドキュメントが戻り値になっている。
※MongoDBから取得したデータはBSONドキュメントが戻り値になっている。
2.2
以下のコマンドを実行する。
コマンド:ruby mongo_main.rb
ドキュメント取得の表示の後に以下のような表示が出れば問題ない。
name = darui
title = blogger
comment = darui
以上!!
以下、参考にさせて頂いたサイト様。
なし。
管理人の独り言
BSONドキュメントでデータが返ってくるのに、
bsonのgemを使わないでto_hashメソッドで変換するのはいいんだろうか?
(正しいやり方が分からない・・・)
それに、このまま掲示板のプログラムに組み込むと、
view側でhashを回してシンボル指定になるのだが、セキュリティ的にいいんだろうか?
ぐぉ~誰か教えろ下さい・・・orz
まぁ、修正が必要なら追々やるとしましょう。
とりあえずは、動くことが大事ですね。
それにしてもRuby力が低くてきつい・・・