2011-08-09 3 views
1

일부 데이터가있는 MongoDB DB가 있습니다. 모든 것이 잘 작동하고 데이터가 몽고 DB에 제대로 삽입되었습니다. 내가 지금하고 싶은 것은 mongoDB DB 파일을 열고, mongo DB 파일의 인간 친화적 인 형식을 볼 수 있도록 BSON 젬을 사용하여 파싱한다.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은 파일 자체를 파싱하지 않고 서버가 반환 한 데이터를 구문 분석하기위한 것입니다.

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 객체가 모든 데이터베이스와 컬렉션의 목록을 얻을 수있게된다 추가 방법이 있습니다

는 다음과 같은 일을 할 것입니다, 당신의 MongoDB를 서버에 연결하고 데이터를 읽으려면 , 모든 데이터를 인쇄해야하는 경우. 자세한 내용은 API documentation for the mongo gem을 확인하십시오.

3

Emily의 답변에 추가 : 파일을 직접 검사 할 수있는 몇 가지 유틸리티가 있습니다. 먼저, mongodump를 사용하여 데이터베이스를 덤프하십시오.

mongodump 

이렇게하면 데이터 파일을 원시 BSON으로 덤프합니다.

그럼 당신은 bsondump와 bson을 검사 할 수 있습니다 :

루비 유틸리티도 있습니다
bsondump dump/test/foo.bson 

그 보석과 함께 제공 :

b2json dump/test/foo.bson 
관련 문제