スポンサーリンク

2015年5月26日

MongoDBで取得したドキュメントをHashに変換して利用する。

修正版:MongoDBのドキュメントの要素を取得する。
タイトル: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の作成するファイルができる

目次:
  1. Rubyプログラムの作成
  2. 説明&実行

MongoDBの起動やmongo(gems)のインストールは以前記事を書いているので、
そちらを参考にして頂ければ分かりやすいと思います。
また、ソースコードも以前の記事にあるものに追記したものになります。

1.Rubyプログラムの作成

1.1
ソースコードは以下の通り作成した。
# 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
view raw mongo_main02.rb hosted with ❤ by GitHub

2.説明&実行

2.1
取得したドキュメントをto_hashメソッドでハッシュにしただけです。
取得するデータが複数の時を考えて配列に格納しています。

※MongoDBから取得したデータはBSONドキュメントが戻り値になっている。

2.2
以下のコマンドを実行する。
コマンド:ruby mongo_main.rb

ドキュメント取得の表示の後に以下のような表示が出れば問題ない。
name = darui
title = blogger
comment = darui

以上!!

以下、参考にさせて頂いたサイト様。
なし。

管理人の独り言
BSONドキュメントでデータが返ってくるのに、
bsonのgemを使わないでto_hashメソッドで変換するのはいいんだろうか?
(正しいやり方が分からない・・・)

それに、このまま掲示板のプログラムに組み込むと、
view側でhashを回してシンボル指定になるのだが、セキュリティ的にいいんだろうか?

ぐぉ~誰か教えろ下さい・・・orz

まぁ、修正が必要なら追々やるとしましょう。
とりあえずは、動くことが大事ですね。

それにしてもRuby力が低くてきつい・・・

人気の投稿