首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoMapper和迁移

MongoMapper和迁移
EN

Stack Overflow用户
提问于 2009-11-20 06:52:17
回答 9查看 6.1K关注 0票数 23

我正在构建一个使用MongoDB作为后端和MongoMapper作为ORM工具的Rails应用程序。假设在版本1中,我定义了以下模型:

代码语言:javascript
复制
class SomeModel
  include MongoMapper::Document
  key :some_key, String
end

后来在版本2中,我意识到模型上需要一个新的必需密钥。因此,在版本2中,SomeModel现在看起来如下所示:

代码语言:javascript
复制
class SomeModel
  include MongoMapper::Document
  key :some_key, String
  key :some_new_key, String, :required => true
end

如何迁移所有现有数据以包含some_new_key?假设我知道如何为所有现有文档设置一个合理的默认值。更进一步,假设在版本3中,我意识到我实际上根本不需要some_key。所以,现在这个模型看起来像这样

代码语言:javascript
复制
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脚本,在数据库上执行任何更新,但我正在寻找的是一个类似迁移的框架,它可以让我跟踪哪些升级脚本已经运行。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-03-15 14:05:38

看看Mongrations...我刚读完,它看起来像是你想要的。

http://terrbear.org/?p=249

http://github.com/terrbear/mongrations

干杯!Kapslok

票数 13
EN

Stack Overflow用户

发布于 2009-11-21 03:26:10

一种选择是使用update操作一次更新所有数据。多更新是开发版本中的新功能,因此您需要使用其中的一个。

票数 1
EN

Stack Overflow用户

发布于 2010-05-13 23:19:55

你可以试试我刚刚做的这个小玩意儿,但目前它只适用于mongoid和rails 3 (beta 3)。http://github.com/adacosta/mongoid_rails_migrations。当它进入最终版本时,它将被升级到rails 3。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1767143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档