Драгоценный камень MongoDB BSON не может прочитать файл базы данных MongoDB? - PullRequest
1 голос
/ 09 августа 2011

У меня есть БД MongoDB с некоторыми данными.Это все работает нормально, данные были вставлены в БД Монго правильно.Однако сейчас я хочу открыть файл mongoDB DB и проанализировать его с помощью гема BSON, чтобы я мог посмотреть на удобный для пользователя формат файла 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 может принимать любые входные данные и сохранять их, но не может прочитать только какие-либо данные.Таким образом, они говорят, что файл базы данных содержит неверные данные, которые не могут быть прочитаны должным образом.Но разве он не может прочитать что-нибудь, что может вставить?

Ответы [ 2 ]

3 голосов
/ 10 августа 2011

Добавление к ответу Эмили: есть несколько утилит, которые вы можете использовать для непосредственного изучения файлов.Сначала выведите дамп базы данных с помощью mongodump:

mongodump

, который будет выгружать файлы данных в сырой BSON.

Затем вы можете проверить bson с помощью bsondump:

bsondump dump/test/foo.bson

Также есть утилита Ruby, которая поставляется с самоцветом:

b2json dump/test/foo.bson
2 голосов
/ 09 августа 2011

MongoDB не является файловой базой данных.Чтобы считывать данные обратно, вам необходимо подключиться к работающему серверу MongoDB.Драгоценный камень BSON предназначен для анализа данных, возвращаемых сервером, а не для анализа самих файлов.

Чтобы подключиться к серверу 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 для монго gem для получения дополнительной информации.

...