Просто для того, чтобы дать немного больше контекста этому вопросу, у меня есть веб-приложение (asp mvc), которое в основном переносит операции CRUD на экземпляр MongoDb, оно выполняет проверку и определенную бизнес-логику до того, как модель будет проверена и отправлена сохраняться, извлекаться и т.д.
Теперь у нас есть одна проблема: в новой версии модели изменились, но существующих данных нет, вот пример: (это конкретный С#, но вопрос действительно является агностиком языка)
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
}
Как вы можете видеть, структура объектов изменилась, но на земле Монго она по-прежнему выдает BadgeNo, а не EmployeeNo. На земле SQL мы обычно имеем миграцию script, которая запускается как часть сборки script, которая будет изменять схему и обновлять/вставлять/удалять любые дополнительные данные для этой дельта.
Итак, как лучше всего управлять подобными миграциями с Монго? Должен ли я иметь script, который я использую для обновления всех экземпляров в Mongo? или есть какая-то другая предпочтительная практика для такого рода вещей.
Любые советы по этому вопросу были бы замечательными
=== Изменить ===
Кажется, что в настоящее время я желаю перейти с вариантом миграции, а не с постепенным откатом, поэтому, имея в виду, кто-нибудь может рекомендовать какие-либо инструменты для помощи в этой области, так как в противном случае каждая миграция (при условии, развертывание) должно было быть предварительно скомпилированной сборкой какого-то рода со всей логикой. Я думал о чем-то вроде FluentMigrator, но вместо того, чтобы работать с SQL, вы работаете с Mongo. В настоящее время мои скрипты сборки используют Nant, я видел некоторые рубиновые инструменты, но не уверен, есть ли какой-либо эквивалент .net.