我们的网站正在生产中(第一阶段),我们使用 MongoDB 和 Asp.Net MVC。但是对于第 2 阶段,我们需要对我们的模式类进行一些更改,例如更改属性名称和更改一些数据类型。
如果有人能指出正确的方向来编写迁移脚本以将所有属性名称更新为新名称并将数据类型更新为新类型,那就太好了!
是否可以编写一个小型 C# 应用程序来从数据库中获取所有集合并将属性名称更新为新名称并更改数据类型?
谢谢 !
我们的网站正在生产中(第一阶段),我们使用 MongoDB 和 Asp.Net MVC。但是对于第 2 阶段,我们需要对我们的模式类进行一些更改,例如更改属性名称和更改一些数据类型。
如果有人能指出正确的方向来编写迁移脚本以将所有属性名称更新为新名称并将数据类型更新为新类型,那就太好了!
是否可以编写一个小型 C# 应用程序来从数据库中获取所有集合并将属性名称更新为新名称并更改数据类型?
谢谢 !
作为 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);
}
}
}
我最近正是这样做的。
首先,重命名代码中的所有类。
然后使用带有renameCollection
的 mongo shell
如果这是一次性操作,则无需编写脚本。
话虽如此,您当然可以编写一个包含所有重命名的 .js 文件,以便在需要时可以轻松地在另一台服务器上再次执行它