Estoy construyendo una aplicación de Rails usando MongoDB como el back-end y MongoMapper como la herramienta ORM. Supongamos que en la versión 1, defino el siguiente modelo:MongoMapper y migraciones
class SomeModel
include MongoMapper::Document
key :some_key, String
end
Más tarde, en la versión 2, me doy cuenta de que necesito un duplicado de la llave requerida en el modelo. Así, en la versión 2, SomeModel ahora se ve así:
class SomeModel
include MongoMapper::Document
key :some_key, String
key :some_new_key, String, :required => true
end
¿Cómo migrar todos mis datos existentes para incluir some_new_key? Supongamos que sé cómo establecer un valor predeterminado razonable para todos los documentos existentes. Llevando esto un paso más allá, supongamos que en la versión 3, me doy cuenta de que realmente no necesito alguna clave. Por lo tanto, ahora el modelo se parece a esto
class SomeModel
include MongoMapper::Document
key :some_new_key, String, :required => true
end
Pero todos los registros existentes en mi base de datos tienen valores establecidos para some_key, y está perdiendo espacio en este punto. ¿Cómo reclamo ese espacio?
Con ActiveRecord, acabo de crear migraciones para agregar los valores iniciales de alguna_nueva_clave (en la versión1 -> migración de la versión 2) y eliminar los valores para some_key (en la versión2 -> migración de la versión3).
¿Cuál es la forma adecuada de hacer esto con MongoDB/MongoMapper? Me parece que todavía es necesario algún método para rastrear qué migraciones se han ejecutado. ¿Existe tal cosa?
EDITADO: Creo que a la gente le falta el sentido de mi pregunta. Hay momentos en los que desea poder ejecutar un script en una base de datos para cambiar o reestructurar los datos en él. Di dos ejemplos más arriba, uno en el que se agregó una nueva clave obligatoria y otra en la que se puede eliminar una clave y reclamar espacio. ¿Cómo se gestiona la ejecución de estos scripts? Las migraciones de ActiveRecord le brindan una manera fácil de ejecutar estos scripts y determinar qué scripts ya se han ejecutado y qué scripts no se han ejecutado. Obviamente, puedo escribir una secuencia de comandos de Mongo que haga alguna actualización en la base de datos, pero lo que estoy buscando es un marco como migraciones que me permita rastrear qué secuencias de comandos de actualización ya se han ejecutado.
Creo que Mongo (/ Mapper) podría ser demasiado joven para ese tipo de cosas. :/ – Konklone
La migración en términos de esquema en realidad no es un concepto adecuado en Mongo DB ya que Mongo DB en realidad no tiene ningún esquema. Solo necesita escribir el script de migración de datos usted mismo. – zsong