更新Mongoengine的架构

时间:2016-11-18 20:04:36

标签: mongoengine

如果我有一份文件:

class Page(Document):
    title = StringField(max_length=200, required=True)
    date_modified = DateTimeField(default=datetime.datetime.now)

我希望将其更新为:

class Page(Document):
    page_title = StringField(max_length=200, required=True)
    date_modified = DateTimeField(default=datetime.datetime.now)

在mongoengine中处理数据库迁移的最佳方法是什么?我想你可以遍历数据库并拉出具有该字段的对象并将其添加回新字段然后删除具有该字段的所有对象,但如果有一种惯用的方法来处理这个字段会很好有点像。

1 个答案:

答案 0 :(得分:2)

我认为最简单的方法是通过两级改变。 首先添加新字段并删除“必需”约束:

class Page(Document):
    title = StringField(max_length=200)
    page_title = String(max_length=200)
    date_modified = DateTimeField(default=datetime.datetime.now)

然后运行以下命令:

for page in Page.objects():
    page.page_title = page.title
    page.save()
Page.objects.update(unset__title=1) ## Unset the title field of the documents

这将更新数据库的文档而不必删除它们(这很有用,因为它们将保持相同的ID)。

然后根据需要对您的班级进行最后修改:

class Page(Document):
    page_title = StringField(max_length=200, required=True)
    date_modified = DateTimeField(default=datetime.datetime.now)