在rails应用程序中使用mongodb备份中的数据..即使用ruby将BSON转换为JSON



我有一堆来自mongodb备份的数据,我想将它们导入到一个新的rails应用程序中(当时使用mongo开发,现在切换回activerecord)。

我尝试过明显的BSON.deserialize(doc),但它只返回第一条记录。你知道我做错了什么吗?有没有一种简单的方法可以将BSON文件转换为JSON或其他可用于MySQL的可用格式?

编辑:嗯,我相信这不是最好的方式。。。但我已经使用ruby shell脚本(使用mongodb的一部分bsondump)成功地转换了它们。

#!/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

更好的解决方案仍然值得赞赏。

如果您有任何形式的嵌套,您当前的脚本将开始崩溃。

老实说,最好的办法就是在本地重新创建MongoDB,然后运行一个脚本从该数据库中读取并输出回MySQL。基本上,只需从MongoDB中提取对象,并将它们映射到ActiveRecord对象中,就可以保存它们。

无论如何,您都需要创建新对象,所以这里有一个测试模式的好方法。

bson对象有一个名为to_json 的方法

最新更新