我正在构建一个Rails应用程序,使用MongoDB作为后端,MongoMapper作为ORM工具.假设在版本1中,我定义了以下模型:
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
如何迁移所有现有数据以包含一些新密钥?假设我知道如何为所有现有文档设置合理的默认值.更进一步,假设在版本3中,我意识到我真的不需要一些密钥.所以,现在模型看起来是这样的
class SomeModel
include MongoMapper::Document
key :some_new_key, String, :required => true
end
但我数据库中的所有现有记录都为某个_键设置了值,这只是在浪费空间.我该如何回收那个空间?
With ActiveRecord, I would have just created migrations to add the initial values of some_new_key (in the version1 -> version2 migration) and to delete the values for some_key (in the version2 -> version3 migration).
使用MongoDB/MongoMapper的合适方式是什么?在我看来,某种跟踪已运行迁移的方法仍然是必要的.这样的事情存在吗?
编辑:我认为人们忽视了我问题的重点.有时,您希望能够在数据库上运行脚本来更改或重组其中的数据.我在上面给出了两个例子,一个是添加了新的必需密钥,另一个是可以删除密钥并回收空间.您如何管理运行这些脚本?ActiveRecord迁移为您提供了一种简单的方法来运行这些脚本,并确定哪些脚本已经运行,哪些脚本还没有运行.很明显,我可以编写一个Mongo脚本来对数据库进行任何更新,但我想要的是一个类似迁移的框架,它可以让我跟踪哪些升级脚本已经运行.