我正在构建一个使用MongoDB作为后端的Rails应用程序,使用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
如何迁移所有现有数据以包含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的初始值(在version1 - > version2迁移中)并删除some_key的值(在version2 - > version3迁移中).
使用MongoDB/MongoMapper执行此操作的适当方法是什么?在我看来,仍然需要一些跟踪哪些迁移的方法.这样的事情存在吗?
编辑:我认为人们忽略了我的问题.有时您希望能够在数据库上运行脚本来更改或重构其中的数据.我在上面给出了两个示例,一个是添加了新的必需密钥,另一个是可以删除密钥并且可以回收空间的示例.如何管理运行这些脚本?ActiveRecord迁移为您提供了一种简单的方法来运行这些脚本并确定已运行的脚本以及尚未运行的脚本.我显然可以编写一个Mongo脚本来对数据库进行任何更新,但我正在寻找的是一个像迁移这样的框架,可以跟踪哪些升级脚本已经运行过.
查看Mongrations ...我刚刚读完了它,它看起来就像你追求的那样.
http://terrbear.org/?p=249
http://github.com/terrbear/mongrations
干杯! Kapslok