mongoengine:更改文档子类

时间:2017-01-03 14:33:15

标签: python mongodb mongoengine schema-migration

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

0 个答案:

没有答案