2011-08-09 47 views
1

我有一個MongoDB數據庫與一些數據。這一切工作正常,數據已正確插入到mongo數據庫中。然而,我現在想要做的是打開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>' 

從谷歌一點點,有些人說的MongoDB可以接受任何類型的輸入和存儲,但不能只是讀任何種類的數據。所以他們說數據庫文件裏有不好的數據,不能正確讀取。但是它不應該能夠讀取它可以插入的任何內容嗎?

回答

2

MongoDB不是基於文件的數據庫。爲了讀取數據,您需要連接到正在運行的MongoDB服務器。 BSON gem用於解析服務器返回的數據,而不是解析文件本身。

要連接到您的MongoDB服務器,並讀取數據,你會做類似如下:

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對象有另外的方法,可以讓你得到所有數據庫和集合的列表,如果你需要打印所有這些數據。查看API documentation for the mongo gem瞭解更多信息。

3

添加到Emily的答案:有一些實用程序,您可以使用它直接檢查文件。首先,轉儲數據庫使用mongodump:

mongodump 

這將數據文件轉儲到原始BSON。

然後,你可以檢查與bsondump的BSON:

bsondump dump/test/foo.bson 

還有一個Ruby程序附帶的寶石:

b2json dump/test/foo.bson