2011-08-09 9 views
1

私はいくつかのデータを持つMongoDB DBを持っています。それはすべて正常に動作し、データはmongo DBに正しく挿入されました。しかし今私がやりたいことは、mongoDB DBファイルを開いて、BSON gemを使ってそれを解析して、mongo DBファイルの人にやさしいフォーマットを見ることができるようにすることです。MongoDBのBSON gemはMongoDBデータベースファイルを読み込めませんか?

data = nil 

File.open("input/bson/database_development.0") do |f| 
    data = f.read 
end 

unpacked_data = BSON.deserialize(data) 

File.new("input/bson/output.txt", "w") do |f| 
    f.write(unpacked_data) 
end 

しかし、これは私に次のエラーを与える:

/home/user/.rvm/gems/ruby-1.9.2-p180/gems/bson-1.3.1/lib/bson/bson_c.rb:28:in `deserialize': no c decoder for this type yet (-86) (TypeError) 
from /home/user/.rvm/gems/ruby-1.9.2-p180/gems/bson-1.3.1/lib/bson/bson_c.rb:28:in `deserialize' 
from /home/user/.rvm/gems/ruby-1.9.2-p180/gems/bson-1.3.1/lib/bson.rb:37:in `deserialize' 
from bsoner.rb:16:in `<main>' 

は、Googleからの少しは、一部の人々は、MongoDBの入力のいずれかの種類を受け入れ、それを保存しますが、ただ読むことができないことを言いましたあらゆる種類のデータだから彼らは、データベースファイルに正しく読み込めないデータが入っていると言っています。しかし、それが挿入できる何かを読むことができないはずですか?

答えて

2

MongoDBはファイルベースのデータベースではありません。データを読み戻すには、実行中のMongoDBサーバーに接続する必要があります。 BSON gemは、ファイル自体を解析するのではなく、サーバーから返されたデータを解析するためのものです。

require 'rubygems' 
require 'mongo' 

connection = Mongo::Connection.new # connects to localhost by default 
db = connection['sample-db'] 
collection = db['test'] 

outfile = File.open('output.txt', 'w') 
collection.find.each { |doc| outfile.puts doc.inspect } 

collectiondbオブジェクトを使用すると、すべてのデータベースとコレクションのリストを取得できるようになる追加のメソッドを持っている:あなたのMongoDBサーバーに接続してデータを読み、次のようなことをやるために

あなたもそれらのすべてのデータを印刷する必要がある場合。詳細についてはAPI documentation for the mongo gemをご覧ください。

3

Emilyの回答に追加する:ファイルを直接調べるために使用できるユーティリティがいくつかあります。まず、mongodumpを使用してデータベースをダンプします。

mongodump 

これは、データファイルをraw BSONにダンプします。

次にあなたがbsondumpでBSONを調べることができます。

bsondump dump/test/foo.bson 

その宝石に付属のRubyユーティリティもあります:

b2json dump/test/foo.bson 
関連する問題