2012-07-08 71 views
1

我們的網站正在生產(階段1),我們使用MongoDB和Asp.Net MVC。 但是對於階段2,我們需要對Schema Classes進行一些更改,例如更改屬性名稱並更改一些數據類型。更新MongoDb類屬性名稱

如果任何人都能指出我們寫正確的方向來編寫一個遷移腳本來將所有屬性名更新爲新名稱並將數據類型更新爲新類型,那就太好了!

是否可以編寫一個小的C#應用​​程序來獲取數據庫中的所有集合並將屬性名稱更新爲新名稱並更改數據類型?

謝謝!

回答

0

我最近做了這個。

首先,重命名代碼中的所有類。
然後使用mongo外殼與renameCollection
如果這是一次性操作,則不需要編寫腳本。

這麼說,當然,你可以寫在你所有的重命名.js文件,以便它可以再次另一臺服務器很容易,如果你需要

+0

您好,renameCollection是否會重命名類中的屬性? – user636525 2012-07-10 16:12:21

0

由於alexjamesbrown上執行,首先在重命名你的屬性類。

然後,您可以爲您的Mongo數據庫創建一個簡單的基本版本控制結構。存儲最新版本,然後在應用程序啓動時檢查版本,並查找版本晚於使用反射的版本的文件。然後,您可以簡單地在源代碼樹中保留如下格式的文件:

public class Version3 : MongoMigration 
{ 
    public Version3 (MongoDatabase database) : base(database) { } 

    public override double Version 
    { 
     get { return 3; } 
    } 

    protected override void PerformUpgrade() 
    { 
     var collectionToUpdate = Database.GetCollection("MyCollection"); 
     var allDocuments = collectionToUpdate .FindAll(); 

     foreach (var document in allDocuments) 
     { 
      var oldFieldValue = document ["OldFieldName"]; 
      if (!document.Contains("NewFieldName")) 
       document.Add("NewFieldName", oldFieldValue); 
      document.Remove("OldFieldName"); 

      collectionToUpdate.Save(document); 
     } 
    } 
}