1

古い 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 クエリはどのようになりますか?

4

0 に答える 0