古い mongoengine スキーマを新しいスキーマに移行したいと考えています。
現在、スキーマは次のようになっています。
class Main(Document):
field_m = StringField()
class MainSub(Main):
field_ms = StringField()
class A(MainSub):
field_a = StringField()
class B(MainSub):
field_b = StringField()
class C(MainSub):
field_c = StringField()
ターゲット スキーマは次のとおりです。
class Main(Document):
field_m = StringField()
class MainSub(Main):
field_ms = StringField()
class A(MainSub):
field_a = StringField()
class SpecialSub(MainSub):
field_ss = StringField()
class X(SpecialSub):
field_b = StringField()
class Y(SpecialSub):
field_c = StringField()
ここで、B と C のすべてのインスタンスは、それぞれ X と Y のインスタンスになります。
Main または Document の他のサブクラスから A、B、および C クラスへの複数の参照があります (それぞれ A、X、および Y への参照になります)。
私のプロジェクトには、残りのコードから独立して実行される移行モジュールがあり、実際のモデル自体をインポートする必要はありません。私自身、MongoDB についての知識はあまりありません。考えられる解決策は次の 3 つです。
A) 移行のために古いものと新しいものの両方を混合するスキーマを作成し、各オブジェクトをコピーし、すべての参照を更新してから、古いオブジェクトを削除します (参照のために非常に複雑です)。
B) MongoEngine を使用してサブクラスを変更します。これどうやってするの?
C) MongoDB を直接使用してサブクラスを変更します。mongoengine を介して MongoDB に直接アクセスするにはどうすればよいですか? また、それぞれの MongoDB クエリはどのようになりますか?