1

我有一个带有一些数据的 MongoDB 数据库。一切正常,数据已正确插入 mongo DB。不过,我现在想做的是打开 mongoDB DB 文件,并使用 BSON gem 解析它,以便我可以查看 mongo DB 文件的人性化格式。

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可以接受任何类型的输入并存储它,但不能读取任何类型的数据。所以他们说数据库文件中包含无法正确读取的错误数据。但是它不应该能够读取它可以插入的任何内容吗?

4

2 回答 2

3

添加到 Emily 的答案:有一些实用程序可用于直接检查文件。首先,使用 mongodump 转储数据库:

mongodump

这会将数据文件转储到原始 BSON。

然后你可以用 bsondump 检查 bson:

bsondump dump/test/foo.bson

gem 还附带了一个 Ruby 实用程序:

b2json dump/test/foo.bson
于 2011-08-09T20:15:52.583 回答
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方法可以让你获得所有数据库和集合的列表,如果你还需要打印出所有这些中的数据。查看mongo gem 的 API 文档以获取更多信息。

于 2011-08-09T19:45:21.547 回答