为了给这个问题提供更多的上下文,我有一个Web应用程序(ASP MVC),它基本上将CRUD操作包装到一个MongoDB实例,它在验证模型并将其发送到存储、检索等之前执行验证和某些业务逻辑。
现在我们遇到的一个问题是,在新版本中,模型已经更改,但现有的数据没有,这里有一个例子:(它是C特定的,但问题实际上是语言不可知论)

public class Person
{
    public Guid Id {get; set;}
    public string Name {get; set;}
    public int Age {get;set;}
    public string BadgeNo {get;set;}
}

public class Person
{
    public Guid Id {get; set;}
    public string Name {get; set;}
    public int Age {get;set;}
    public string EmployeeNo {get; set;} // Still contains same data as BadgeNo just called something different
}

正如你所看到的,物体的结构已经改变了,但在蒙古国土上,它仍然散发着一枚徽章,而不是一名雇员。在SQL领域,我们通常会有一个迁移脚本,它作为构建脚本的一部分运行,该脚本将更改模式并更新/插入/删除该增量的任何其他数据。
那么,如何最好地管理这些蒙古人的迁移呢?我还应该有一个脚本来更新Mongo中的所有实例吗?或者做这类事情有没有其他更好的做法?
关于这个问题的任何建议都是很好的
===编辑===
目前我似乎希望使用迁移选项,而不是逐步淘汰方法,因此考虑到这一点,任何人都可以推荐在这一领域提供帮助的任何工具,否则每个迁移(假设一个滚入、滚出)都必须是某种类型的预编译程序集。所有的逻辑。我在想一些与FluentMigrator相关的东西,但是您不是在使用SQL,而是在使用Mongo。目前我的构建脚本正在使用nant,我已经看到一些Ruby工具,但不确定是否有任何.NET等效工具。

最佳答案

基本上有两种方法:
确保应用程序代码可以处理数据结构的两个“版本”,并且在保存时,可以更新到新结构。
编写迁移脚本
我可能会选择选项1,因为它是一种允许您逐步更新的方法,与选项2一样,您基本上需要取下您的应用程序,这样您就可以一次性更新代码(快速)和数据(可能较慢)。
稍后,或者如果您发现有必要,也可以执行选项2来迁移您的数据。这样就不必删除站点,并且可以在后台异步运行。

10-06 05:26
查看更多