【问题标题】:Migrating MongoDB fields with MongoEngine使用 MongoEngine 迁移 MongoDB 字段
【发布时间】:2017-01-22 09:34:06
【问题描述】:

所以,我在 MongoEngine 中建模的 MongoDB 中有两个文档(经典关系数据库示例)

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,通过附加ListField 将其添加到正确的Person
  3. Address 取消设置字段

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

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

有人知道这个的好方法吗?

【问题讨论】:

    标签: python mongodb flask migration mongoengine


    【解决方案1】:

    Mongodb 没有像 sqlalchemy 这样的关系,那么像这样的东西呢:

    class Person(Document):
        name = StringField()
        address = ListField(DocumentField(Address))
    
    city1 = Address(city='City1')
    session.save(ad)
    city2 = Address(city='City2')
    session.save(city2)
    person = Person(name='Ali', address=[city1, city2])
    session.save(person)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      • 1970-01-01
      • 2019-07-28
      • 1970-01-01
      • 2015-07-19
      • 1970-01-01
      相关资源
      最近更新 更多