更新MongoDb类属性名称

时间:2012-07-08 02:02:57

标签: asp.net-mvc mongodb-.net-driver

我们的网站正在制作中(第1阶段),我们将MongoDB与Asp.Net MVC一起使用。 但对于阶段2,我们需要对我们的架构类进行一些更改,例如更改属性名称和更改某些数据类型。

如果有人能指出我们正确的方向来编写迁移脚本来将所有属性名称更新为新名称,将数据类型更新为新类型,那就太棒了!

是否可以编写一个小型C#应用程序来获取数据库中的所有集合,并将属性名称更新为新名称并更改数据类型?

谢谢!

2 个答案:

答案 0 :(得分:0)

我最近做到了这一点。

首先,在代码中重命名所有类 然后使用带renameCollection的mongo shell 如果这是一次性操作,则无需编写脚本。

这么说,你当然可以写一个包含你所有重命名的.js文件,这样如果你需要它可以在另一台服务器上再次执行

答案 1 :(得分: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);
        }
    }
}