如何运行迁移以更改Mongoid/MongoDB中字段的类型而不丢失任何数据?更改Mongoid中的字段类型而不丢失数据
在我的情况下,我试图从BigDecimal(存储为字符串)转换为Integer来存储一些钱。我需要将字符串十进制表示转换为整数的分。我不想丢失现有的数据。
我假设的步骤可能是这样的:
- 创造新的整型字段用一个新的名字,说
amount2
- 部署到生产环境和运行迁移(或耙任务),其将每个
amount
为amount2
- 正确的价值(这整个过程中现有代码仍然使用
amount
并没有从用户的角度来看停机) - 采取现场检修,运行日Ë迁移一个更多的时间来捕捉,可以在最后几分钟发生了变化
- 删除
amount
和重命名amount2
到amount
- 部署新的代码,预计
amount
是一个整数 - 把网站备份 任何
amount
领域
它看起来像Mongoid提供rename
方法:http://mongoid.org/docs/persistence/atomic.html#rename
但我有点困惑这是如何使用的。如果您有一个名为amount2
的字段(并且您已删除amount
),那么您是否只运行Transaction.rename :amount2, :amount
?那么我想这会立刻破坏底层表示,所以你必须在这之后重新启动你的应用服务器?如果你运行的话会发生什么,而amount
仍然存在?它会被覆盖,失败或尝试自行转换吗?
谢谢!
听起来合乎逻辑的。但我不确定是否需要重新启动。首先,你需要更新模型中的字段名称? 至于重写,我不知道,但这个链接的更新插入部分http://whyjava.wordpress.com/2012/02/07/how-to-rename-field-in-all-the-mongodb -documents /确实似乎暗示它会尝试写入,并且可能会覆盖该字段(如果存在)。所以它不像常规的基于SQL的重命名,而是单独移动每个文档值。说得通? – 2012-02-22 06:22:50
嗯...不知道,还是想获得工作的例子,从开始到结束。如果我的成功,我会发布一个。 – 2012-02-23 05:03:51