Ответ 1
Отъезд Монграны... Я только что закончил читать об этом, и похоже, что вы после.
http://github.com/terrbear/mongrations
Ура! Kapslok
Я создаю приложение 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, который делает любое обновление в базе данных, но то, что я ищу, - это инфраструктура, такая как миграции, которая позволяет мне отслеживать, какие сценарии обновления уже выполняются.
Отъезд Монграны... Я только что закончил читать об этом, и похоже, что вы после.
http://github.com/terrbear/mongrations
Ура! Kapslok
Один из вариантов - использовать операцию update
для одновременного обновления всех ваших данных. Multi обновление является новым в релизах разработки, поэтому вам нужно будет использовать один из них.
Вы можете попробовать это приспособление, которое я только что сделал, но он работает только с монгоидами и рельсами 3 (бета 3) на данный момент. http://github.com/adacosta/mongoid_rails_migrations. Он будет обновлен до рельсов 3, когда он станет окончательным.
Еще один камень для миграции MongoMapper https://github.com/alexeypetrushin/mongo_mapper_ext
Монграции - это супер старый драгоценный камень, полностью устаревший. Я рекомендую НЕ использовать его.
Exodus - действительно классная среда миграции для Mongo, которая может быть тем, что вы хотите:
Мы просто построим это: https://github.com/eberhara/mongration - это обычный модуль node (вы можете найти его на npm).
Нам нужна хорошая структура миграции mongodb, но мы не смогли найти ее, поэтому мы построили ее.
У этого есть много лучших функций, чем обычные рамки миграции:
Надеюсь, что это поможет!
Клинт,
Вы можете писать код для обновления, хотя кажется, что для обновления записи на основе собственных полей не поддерживается.
В таком случае я сделал следующее и выполнил его на сервере:
------------------------------
records = Patient.all()
records.each do |p|
encounters = p.encounters
if encounters.nil? || encounters.empty?
mra = p.updated_at
#puts "\tpatient...#{mra}"
else
mra = encounters.last.created_at
#puts "\tencounter...#{mra}"
end
old = p.most_recent_activity
p.most_recent_activity = mra
p.save!
puts "#{p.last_name} mra: #{old} now: #{mra}"
end
------------------------------
Бьюсь об заклад, вы можете подключиться к Activerecord:: Miration для автоматизации и отслеживания сценариев миграции.
MongoDB - это база данных без схемы. Вот почему нет миграции. В самой базе данных не имеет значения, имеют ли объекты ключ: some_key или ключ: some_other_key в любое время.
MongoMapper пытается ввести в действие некоторые ограничения на это, но поскольку база данных настолько гибкая, вам придется самостоятельно поддерживать эти ограничения. Если вам нужен ключ для каждого объекта, убедитесь, что вы запустили script для обновления этих ключей на ранее существовавших объектах или обработали случай объекта, у которого нет этого ключа, когда вы сталкиваетесь с ним.
Я новичок в MongoDB самостоятельно, но, насколько я вижу, из-за гибкости без схемы, db, это то, как вам нужно будет обрабатывать его.