1

いくつかのデータを含む MongoDB DB があります。すべて正常に動作し、データが 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はあらゆる種類の入力を受け入れて保存できるが、あらゆる種類のデータを読み取ることはできないと言う人もいました。つまり、データベース ファイルには、正しく読み取ることができない不良データが含まれていると言っているのです。しかし、挿入できるものは何でも読み取ることができるべきではないでしょうか?

4

2 に答える 2

3

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

mongodump

これにより、データ ファイルが raw 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 に答える