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