申し訳ありません。
前回投稿した記事(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の作成するファイルができる
目次:
- Rubyプログラムの作成
- 説明&実行
MongoDBの起動やmongo(gems)のインストールは以前記事を書いているので、
そちらを参考にして頂ければ分かりやすいと思います。
また、ソースコードも以前の記事にあるものに追記したものになります。
1.Rubyプログラムの作成
1.1
Rubyのソースコードは以下の通り作成した。
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_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 |
2.説明&実行
2.1
BSONドキュメントを取得しているdocにフィールド名でアクセスし、値を取得している。
(ソースコード参照)
記事上部にも記載したが、
docを配列に格納する際にto_hashメソッドを使わないで、BSONドキュメントのまま格納している。
2.2
以下のコマンドを実行する。
コマンド:ruby mongo_main.rb
以上!!
以下、参考にさせて頂いたサイト様。
なし。
管理人の独り言
昨日、「友人のプログラマからブログ見たけど、hashにする必要なくね?」っと言われ、
BSONドキュメントがハッシュの配列のように見えたため、
docに対してハッシュのようにアクセスしてみた。
結果そのまま値を取り出すことができてしまった。
おそらく、BSONやRubyのハッシュに対しての知識・経験が不足していたことが原因かと・・・
あぁ~やらかした。
最後にもう一度、謝罪しておきます。
間違った知識を記事にしてしまい申し訳ないです。