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 的了解不多。我看到了三种可能的解决方案:

A)为迁移编写一个混合新旧混合的模式,然后复制每个对象,更新所有引用,然后删除旧对象(由于引用而非常复杂)

B) 使用 MongoEngine 更改子类。我怎样才能做到这一点?

C) 直接使用 MongoDB 更改子类。如何通过 mongoengine 直接访问 MongoDB,以及相应的 MongoDB 查询是什么样的?

4

0 回答 0