2012-01-25 1 views
0

私はmongodbバックアップから新しいレールアプリにインポートしたいデータをたくさん持っています(mongoを使って開発していました、今はactiverecordに戻っています)。rails appでmongodb backupのデータを使用します。つまり、rubyを使用してBSONをJSONに変換しますか?

明らかにBSON.deserialize(doc)を試しましたが、最初のレコードのみを返します。私が間違っていることは何ですか? BSONファイルをJSONや他の使用可能な形式に変換する簡単な方法はありますか?

編集:これはほとんど最善の方法ではありませんが、私はルビーシェルスクリプト(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 

さらに良い解決法があります。

答えて

1

ネスティングのフォームがある場合、現在のスクリプトは崩壊し始めます。

正直、MongoDBをローカルで再作成してから、そのDBから読み込んでMySQLに出力するためのスクリプトを実行するだけです。基本的にはMongoDBからオブジェクトを取り出し、それらをActiveRecordオブジェクトにマップして保存することができます。

新しいオブジェクトを作成する必要があります。スキームをテストするには、ここをクリックしてください。