Ruby on rails 在rails应用程序中使用mongodb备份中的数据。。。i、 e.使用ruby将BSON转换为JSON?

Ruby on rails 在rails应用程序中使用mongodb备份中的数据。。。i、 e.使用ruby将BSON转换为JSON?,ruby-on-rails,json,mongodb,bson,Ruby On Rails,Json,Mongodb,Bson,我有一堆来自mongodb备份的数据,我想将这些数据导入一个新的rails应用程序(当时正在使用mongo开发,现在切换回activerecord) 我尝试了明显的BSON.deserialize(doc),但它只返回第一条记录。知道我做错了什么吗?有没有一种简单的方法可以将BSON文件转换为JSON或其他可用格式以引入MySQL 编辑:嗯,我敢肯定,这不是最好的办法。。。但是我已经使用RubyShell脚本(利用mongodb的一部分bsondump)成功地转换了它们 #/usr/bin/en

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

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

编辑:嗯,我敢肯定,这不是最好的办法。。。但是我已经使用RubyShell脚本(利用mongodb的一部分
bsondump
)成功地转换了它们

#/usr/bin/env ruby
bson_files=Dir['./*.bson']
bson|U文件。每个do|文件|
tmp_file_name=file+“.tmp”
新建文件名=文件+“.json”
系统(“bsondump”+文件+“>”+tmp_文件名)
file=file.open(tmp\u文件名)
内容=[]

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

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


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

bson对象有一个名为

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