我構建了一個使用MongoDB作爲後端和MongoMapper作爲ORM工具的Rails應用程序。假設在版本1中,我定義了以下型號:MongoMapper和遷移
class SomeModel
include MongoMapper::Document
key :some_key, String
end
在版本2的後面,我意識到我需要一個新的模型所需的密鑰。因此,在第2版,SomeModel現在看起來是這樣的:
class SomeModel
include MongoMapper::Document
key :some_key, String
key :some_new_key, String, :required => true
end
我如何遷移我的所有現有數據,包括some_new_key?假設我知道如何爲所有現有文檔設置合理的默認值。進一步說,假設在版本3中,我意識到我真的不需要some_key。所以,現在的模型看起來像這樣
class SomeModel
include MongoMapper::Document
key :some_new_key, String, :required => true
end
但這一切在我的數據庫中的現有記錄有some_key設置的值,它只是在這一點上浪費空間。我如何回收這個空間?
使用ActiveRecord,我可以創建遷移以添加some_new_key(在版本1 - >版本2遷移中)的初始值,並刪除some_key(在版本2 - >版本3遷移中)的值。
用MongoDB/MongoMapper做這件事的適當方法是什麼?在我看來,跟蹤哪些遷移已經運行的一些方法仍然是必要的。這樣的事情存在嗎?
編輯:我認爲人們錯過了我的問題。有時您希望能夠在數據庫上運行腳本來更改或重構其中的數據。上面給出了兩個示例,一個是添加了新的必需密鑰,另一個是可以移除密鑰並可以回收空間的示例。你如何管理這些腳本的運行? ActiveRecord遷移爲您提供了一種簡單的方法來運行這些腳本,並確定哪些腳本已經運行,哪些腳本尚未運行。我顯然可以編寫一個Mongo腳本來對數據庫進行任何更新,但是我期待的是一個像遷移這樣的框架,可以讓我跟蹤哪些升級腳本已經運行。
我認爲Mongo(/ Mapper)可能對於這種事情太年輕了。 :/ – Konklone 2010-01-05 20:04:23
由於Mongo DB實際上沒有任何模式,所以在模式方面的遷移實際上並不是一個適當的概念。您需要自己編寫數據遷移腳本。 – zsong 2012-01-26 21:39:44