【问题标题】:MongoDB's BSON gem can't read a MongoDB database file?MongoDB 的 BSON gem 无法读取 MongoDB 数据库文件?
【发布时间】:2011-10-23 12:50:20
【问题描述】:

我有一个包含一些数据的 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>'

从谷歌一点点,有人说 mongoDB 可以接受任何类型的输入并存储它,但不能读取任何类型的数据。所以他们说数据库文件中包含无法正确读取的错误数据。但是它不应该能够读取它可以插入的任何内容吗?

【问题讨论】:

    标签: ruby-on-rails mongodb typeerror bson


    【解决方案1】:

    补充 Emily 的答案:您可以使用一些实用程序直接检查文件。首先,使用 mongodump 转储数据库:

    mongodump
    

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

    然后你可以用 bsondump 检查 bson:

    bsondump dump/test/foo.bson
    

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

    b2json dump/test/foo.bson
    

    【讨论】:

      【解决方案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 了解更多信息。

      【讨论】:

        猜你喜欢
        • 2012-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-19
        • 2021-02-25
        • 2022-01-24
        • 1970-01-01
        • 2018-08-17
        相关资源
        最近更新 更多