2016-11-18 67 views
1

如果我有這樣一個文件:更新架構的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數據庫遷移的最佳方法?我會想象你可以遍歷數據庫,並拉動有該字段的對象,並將它們添加回新字段,然後刪除所有具有該字段的對象,但如果有一種慣用的方法來處理這個那類的東西。

+0

有在mongoengine沒有遷移,據我所知。我發現的只是Ross Lawley僞遷移的一個例子:https://gist.github.com/rozza/3379016 –

+1

你似乎只是手動更新數據庫$重命名 – Rob

回答

0

我認爲最簡單的方法是通過兩步改變班級。 首先添加新的領域,並刪除了「必要」的約束:

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)