![](/img/trans.png)
[英]Start Ruby on Rails app through systemd socket activation (i.e. start Rails server listening on pre-existing socket)
[英]Use data from mongodb backup in rails app… i.e. convert BSON to JSON using ruby?
我有大量来自mongodb备份的数据,我想导入到一个新的Rails应用程序中(正在使用mongo进行开发,现在又切换回activerecord)。
我尝试了显而易见的BSON.deserialize(doc)
但它仅返回第一条记录。 有什么想法我做错了吗? 有没有一种简单的方法可以将BSON文件转换为JSON或另一种可用格式以导入MySQL?
编辑:好吧,我敢肯定这并不是最好的方法,但是我已经设法使用ruby shell脚本(利用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
更好的解决方案仍然受到赞赏。
如果您有任何形式的嵌套,则当前脚本将开始崩溃。
老实说,最好的选择就是在本地重新创建MongoDB,然后运行脚本以从该数据库读取并输出回MySQL。 基本上只是从MongoDB中拉出对象并将它们映射到ActiveRecord对象中,以便您可以保存它们。
无论如何,您都将需要创建新对象,因此这是一种测试架构的好方法。
bson对象有一个名为to_json的方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.