Использовать данные из резервной копии mongodb в приложении rails ... то есть конвертировать BSON в JSON, используя ruby? - PullRequest
0 голосов
/ 25 января 2012

У меня есть куча данных из резервной копии mongodb, которую я хотел бы импортировать в новое приложение rails (разрабатывал с использованием mongo, теперь переключаясь обратно на activerecord).

Я попробовал очевидноеBSON.deserialize(doc) но возвращает только первую запись.Есть идеи, что я делаю не так?Есть ли простой способ конвертировать файлы BSON в JSON или другой используемый формат для переноса в MySQL?

Редактировать: Ну, это вряд ли лучший способ, я уверен ... но мне удалоськонвертируйте их, используя скрипт оболочки ruby ​​(используя bsondump, часть mongodb).

#!/usr/bin/env ruby

bson_files = Dir['./*.bson']

bson_files.each do |file|
  tmp_file_name = file+".tmp"
  new_file_name = file+".json"

  system("bsondump "+file+" > "+tmp_file_name)
  file = File.open(tmp_file_name)
  contents = []
  file.each {|line| contents << line }
  contents = "["+contents[0..-2].join.gsub(/}\n/,"},\n")[0..-3].gsub(/ObjectId\( (.{26}) \)/,"\\1").gsub(/Date\( ([0-9]*) \)/,"\\1")+"]"
  out = File.open(new_file_name, 'w')
  out.write(contents)
end

лучшие решения по-прежнему приветствуются.

Ответы [ 2 ]

1 голос
/ 25 января 2012

Если у вас есть какая-либо форма вложенности, ваш текущий скрипт начнет разваливаться.

Честно говоря, вам лучше всего просто заново создать MongoDB, а затем запустить скрипт для чтения из этой БД и вывода обратно в MySQL. По сути, просто извлеките объекты из MongoDB и отобразите их в свои объекты ActiveRecord, чтобы вы могли их сохранить.

Вам все равно нужно будет создавать новые объекты, так что вот отличный способ проверить вашу схему.

0 голосов
/ 04 ноября 2018
У

объекта bson есть метод с именем to_json

...