使用MongoEngine迁移MongoDB字段

时间:2017-01-22 09:34:06

标签: python mongodb flask migration mongoengine

所以,我在MongoEng中建模了两个MongoE文档(经典关系数据库示例)

class Person(Document)
    name = StringField()

class Address(Document)
    person = ReferenceField(Person)
    city = StringField()

一个人可以拥有多个地址。我想迁移这些模型,使其成为新的模式:

class Address(Document)
    city = StringField()

class Person(Document)
    name = StringField()
    address = ListField(ReferenceField(Address))

这涉及在两个架构上设置和取消设置字段,并确保将旧的Address条目迁移到正确的Person地址列表中。

在我看来它会是这样的:

  1. 将字段设置为Person
  2. 对于每个Address,请附加Person
  3. 将其添加到正确的ListField
  4. 取消设置Address
  5. 中的字段

    这似乎是一个简单的例子,有一个足够简单的解决方案,虽然mongoengine的实现已经躲过了我一段时间了。 通过更改python中的类,服务器崩溃抱怨fields cannot be resolved。同样重新排序类是一个问题,因为类依赖于彼此切换。除了MongoDB中的集合之外,还需要更新。

    我记得SQLAlchemy有很好的迁移支持,但我找不到与Flask + MongoEngine类似的东西。

    任何人都知道一个很好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

Mongodb没有像sqlalchemy那样的关系,所以这样的事情怎么样:

comp_by_country_pct.loc[
    comp_by_country_pct.groupby(level=0).idxmax()
].reset_index()

  Company Country       Pct
0     bar     one  0.440000
1     foo     two  0.392857