我想将旧的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查询是什么样的?