スポンサーリンク

2015年5月27日

MongoDBのドキュメントの要素を取得する。

謝意
申し訳ありません。
前回投稿した記事(MongoDBで取得したドキュメントをHashに変換して利用する。)なのですが、
管理人の知識・経験不足により間違えた内容を投稿しておりました。

修正箇所なのですが、
ドキュメントをto_hashメソッドでハッシュに変換していることがそもそもの間違いでした。
ドキュメントは、そのままハッシュのようにアクセスできます。
修正したソースコードをこちらの記事に掲載します。

前回の記事についてはこういうこともできるけど、
無駄なことをしているなと思って見て下さい。

今後とも読者様は宜しくお願い致します。

タイトル:MongoDBのドキュメントの要素を取得する。
「MongoDBで取得したドキュメントをHashに変換して利用する。」の修正版。

目的:MongoDBから取得したドキュメントの要素をコンソール表示する。

実施環境:
OS:Windows8.1
Ruby:v2.2.2
mongo(gems):v2.0.4
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
Rubyのソースコードは以下の通り作成した。
# encoding: utf-8
# File Name: mongo_main03.rb
# Create Day is 2015/05/27
# Last Update Day is 2015/05/27
# 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"を検索条件に指定
doc_array = Array.new
puts "ドキュメント取得"
collection.find(:name => "darui").each do |doc|
doc_array.push(doc)
puts doc
end
# BSONドキュメントの配列の内容を表示
doc_array.each do |doc|
puts "name = " + doc[:name]
puts "title = " + doc[:title]
puts "comment = " + doc[: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_main03.rb hosted with ❤ by GitHub


2.説明&実行

2.1
BSONドキュメントを取得しているdocにフィールド名でアクセスし、値を取得している。
(ソースコード参照)

記事上部にも記載したが、
docを配列に格納する際にto_hashメソッドを使わないで、BSONドキュメントのまま格納している。

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

以上!!

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

管理人の独り言
昨日、「友人のプログラマからブログ見たけど、hashにする必要なくね?」っと言われ、
BSONドキュメントがハッシュの配列のように見えたため、
docに対してハッシュのようにアクセスしてみた。

結果そのまま値を取り出すことができてしまった。
おそらく、BSONやRubyのハッシュに対しての知識・経験が不足していたことが原因かと・・・

あぁ~やらかした。
最後にもう一度、謝罪しておきます。

間違った知識を記事にしてしまい申し訳ないです。


人気の投稿