我有一个带有一些数据的MongoDB DB。一切正常,数据被正确插入mongo DB。不过,我现在要做的是打开mongoDB数据库文件,并使用BSON gem解析它,以便我可以查看mongo数据库文件的人性化格式。
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可以接受任何类型的输入并存储它,但不能只读取任何类型的数据。所以他们说数据库文件中包含了无法正确读取的错误数据。但它不应该能够读取它可以插入的任何内容吗?
答案 0 :(得分:3)
添加到Emily的答案:您可以使用一些实用程序直接检查文件。首先,使用mongodump转储数据库:
mongodump
这会将数据文件转储到原始BSON。
然后你可以用bsondump检查bson:
bsondump dump/test/foo.bson
还有一个随gem附带的Ruby实用程序:
b2json dump/test/foo.bson
答案 1 :(得分: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 }
collection
和db
对象具有其他方法,可以让您获得所有数据库和集合的列表,如果您还需要打印所有数据库和集合中的数据。有关详细信息,请查看API documentation for the mongo gem。