0

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

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

编辑:嗯,这几乎不是最好的方法,我敢肯定......但我已经设法使用 ruby​​ shell 脚本(利用bsondumpmongodb 的一部分)转换它们。

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

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

4

2 回答 2

1

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

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

无论如何,您都需要创建新对象,因此这是测试架构的好方法。

于 2012-01-25T05:35:37.140 回答
0

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

于 2018-11-04T18:28:21.407 回答