私は、バックエンドとしてMongoDBを使用し、ORMツールとしてMongoMapperを使用してRailsアプリケーションを構築しています。バージョン1で、次のモデルを定義するとします。
class SomeModel
include MongoMapper::Document
key :some_key, String
end
バージョン2の後半で、モデルに新しい必須キーが必要であることに気付きました。したがって、バージョン2では、SomeModelは次のようになります。
class SomeModel
include MongoMapper::Document
key :some_key, String
key :some_new_key, String, :required => true
end
既存のすべてのデータを移行してsome_new_keyを含めるにはどうすればよいですか?既存のすべてのドキュメントに適切なデフォルト値を設定する方法を知っていると仮定します。これをさらに一歩進めて、バージョン3で、some_keyがまったく必要ないことに気付いたとします。これで、モデルは次のようになります
class SomeModel
include MongoMapper::Document
key :some_new_key, String, :required => true
end
しかし、私のデータベースにあるすべての既存のレコードにはsome_keyの値が設定されており、この時点でスペースを浪費しているだけです。そのスペースを再利用するにはどうすればよいですか?
ActiveRecordを使用すると、some_new_keyの初期値を追加し(version1-> version2移行の場合)、some_keyの値を削除する(version2-> version3移行の場合)移行を作成します。
MongoDB / MongoMapperでこれを行う適切な方法は何ですか?どの移行が実行されたかを追跡する何らかの方法がまだ必要であるように私には思えます。そのようなものは存在しますか?
編集:人々は私の質問の要点を見逃していると思います。データベースでスクリプトを実行して、データベース内のデータを変更または再構築できるようにしたい場合があります。上記の2つの例を示しました。1つは新しい必須キーが追加された例で、もう1つはキーを削除してスペースを再利用できる例です。これらのスクリプトの実行をどのように管理しますか?ActiveRecordの移行により、これらのスクリプトを実行し、実行済みのスクリプトと実行されていないスクリプトを簡単に判別できます。データベースの更新を行うMongoスクリプトを作成することはできますが、私が探しているのは、どのアップグレードスクリプトが既に実行されているかを追跡できる移行のようなフレームワークです。