如何運行遷移以更改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