Я недавно сделал нечто подобное и подошел к нему как к 3-х шаговому процессу. Может быть, есть и другой способ Rails, но этот способ работал для меня и был безболезненным.
Я использовал итеративный подход и воспользовался тем, что MongoDB на самом деле является очень удобной системой хранения документов. Я начал с реляционной установки, используя реляционные ассоциации Mongoid (внизу страницы), синтаксис reference_many и referenced_in. Когда все заработало, я итеративно реорганизовал подход, более ориентированный на документы.
1. Дамп существующей базы данных прямо в MongoDB
Я использовал свои существующие модели для принудительного дампа таблиц и данных SQL в параллельные документы MongoDB. Я просто вбил в них все, что у меня было, не беспокоясь об именах или отношениях; строгое отображение таблиц в коллекции 1: 1.
Это был один раз для меня. Как только все здесь, шаги 2 и 3 берут эти данные и преобразуют их в структуру, которую я хотел. Я также мог бы изменить свои модели, поскольку мне больше не нужно было взаимодействовать с реляционной системой. Возможно, вы захотите создать своего рода копию существующих моделей на тот случай, если вам понадобится вернуться к этому шагу по любой причине.
2. Перенос данных
Для следующего шага я пошел с пользовательским приложением оболочки ruby. Опять же, возможно, есть лучший способ сделать это с помощью функций Rails, но я остановился на прямом подходе в стиле сценариев транзакций.
Я использовал необработанный драйвер MongoDB Ruby , прочитал базу данных, созданную на шаге 1, и преобразовал исходные коллекции в нужные мне формы. Я использовал отдельную базу данных для получателя из базы, созданной на шаге 1, потому что я итеративно модифицировал этот скрипт, чтобы он становился все более ориентированным на документ, так как я рефакторинг моей модели на шаге 3.
3. Рефакторинг модели по мере необходимости
Я реорганизовал мою модель для работы с базой данных, созданной на шаге 2, сделал мои тесты успешными, а затем вернулся к сценарию на шаге 2 и внес изменения, чтобы сделать базу данных более ориентированной на документ.
Я повторял шаги 2 и 3, пока не произвел рефакторинг макетов модели и документа, пока не получил окончательный результат.