Я создаю приложение Rails с использованием MongoDB в качестве внешнего и MongoMapper в качестве инструмента ORM. Предположим, что в версии 1 я определяю следующую модель:
class SomeModel
include MongoMapper::Document
key :some_key, String
end
Позже в версии 2 я понял, что мне нужен новый требуемый ключ для модели. Итак, в версии 2 SomeModel теперь выглядит так:
class SomeModel
include MongoMapper::Document
key :some_key, String
key :some_new_key, String, :required => true
end
Как перенести все мои существующие данные, чтобы включить some_new_key? Предположим, что я знаю, как установить разумное значение по умолчанию для всех существующих документов. Сделав еще один шаг, предположим, что в версии 3 я понимаю, что мне действительно не нужна some_key. Итак, теперь модель выглядит так:
class SomeModel
include MongoMapper::Document
key :some_new_key, String, :required => true
end
Но все существующие записи в моей базе данных имеют значения, заданные для some_key, и просто теряют пространство на этом этапе. Как восстановить это пространство?
С ActiveRecord я бы только что создал миграции, чтобы добавить начальные значения some_new_key (в миграции version1 → version2) и удалить значения для some_key (в миграции версии 2 → версия 3).
Каким образом можно сделать это с помощью MongoDB/MongoMapper? Мне кажется, что необходим какой-то метод отслеживания миграции. Существует ли такая вещь?
EDITED: Я думаю, что люди не понимают моего вопроса. Бывают случаи, когда вы хотите запустить script в базе данных для изменения или реструктуризации данных в нем. Я привел два примера выше: тот, где был добавлен новый необходимый ключ, и тот, где можно удалить ключ, и пространство может быть восстановлено. Как вы управляете этими сценариями? Миграция ActiveRecord дает вам простой способ запускать эти сценарии и определять, какие скрипты уже запущены и какие сценарии не выполнялись. Я могу, очевидно, написать Mongo script, который делает любое обновление в базе данных, но то, что я ищу, - это инфраструктура, такая как миграции, которая позволяет мне отслеживать, какие сценарии обновления уже выполняются.