2012-07-08 81 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); 
     } 
    } 
}