В настоящее время я работаю над приложением для рельсов, где мы используем mongoid/mongoDB на сервере. Я понимаю, что мне не нужен ActiveRecord, такой как миграция, для переноса схемы, но мне нужно перенести данные, когда я изменяю определения модели mongoid. Кто-нибудь еще сталкивается с таким же сценарием, если да, то как вы с этим справляетесь?
Миграция базы данных Rails/Mongoid
Ответы (4)
Напишите пользовательскую задачу rake для переноса данных по мере необходимости.
Даже если вы не вносите изменения в схему, вам может потребоваться переместить данные между полями или удалить поля, которые больше не используются в кодовой базе. Хорошо иметь миграции, которые можно запускать при развертывании нового кода. Я рекомендую использовать гем под названием mongoid_rails_migrations
. Это предоставляет вам генераторы миграции, к которым вы привыкли, и обеспечивает некоторую организацию миграции данных.
class MyMigration < Mongoid::Migration
def self.up
MyModel.all.each do |model|
# label was renamed to name
model.set :name, model[:label] # copy the data from the old field to the new one
model.remove_attribute :label # remove the old field from the document
model.save!
end
end
end
MyModel.all.rename(label: :name)
. Это выполняет атомарное $rename и даст вам гораздо лучшую производительность, чем ручное пошаговое выполнение и сохранение. +1 за mongoid_rails_migrations
:)
- person Jay; 20.05.2015
Этот вопрос касается той же проблемы создания пользовательских миграций в настройке mongoid.
Модель изменения времени выполнения с mongodb/mongoid
Недавно у меня был какой-то сценарий, когда мне нужно было выполнить миграцию данных только один раз (в основном обновить грязные данные); Итак, у меня были монгоидные миграции в /db/migrate/ и переопределение задачи db:migrate, чтобы она создавала коллекцию в mongo db самого приложения, скажем, «миграции», которые записывают миграцию, которая была запущена, с этим , ни одна из миграций не будет выполняться снова, и вы можете продолжать добавлять миграции с некоторой иерархией (если миграция является взаимозависимой).