database - Meteor cómo realizar migraciones de bases de datos?
upgrade migrate (3)
¿Cómo se realizan las migraciones de bases de datos con Meteor? Con Ruby on Rails, hay ActiveRecord :: Migration. ¿Hay un mecanismo equivalente en Meteor?
Por ejemplo, hago una aplicación con algunos datos de usuario. Estoy almacenando los datos en Mongo usando un formato JSON. La aplicación cambia y el esquema de la base de datos JSON debe cambiar. Puedo escribir un método de migración para cambiar el esquema, sin embargo, solo quiero que esto se ejecute si la base de datos del servidor está desactualizada.
Como Aram ya señaló en el comentario, el ercolate:migrations p ercolate:migrations le proporciona lo que necesita. Muestra
Migrations.add({
version: 1,
name: ''Adds pants to some people in the db.'',
up: function() {//code to migrate up to version 1}
down: function() {//code to migrate down to version 0}
});
Migrations.add({
version: 2,
name: ''Adds a hat to all people in the db who are wearing pants.'',
up: function() {//code to migrate up to version 2}
down: function() {//code to migrate down to version 1}
});
Creé un paquete inteligente para este caso de uso.
Ver https://atmosphere.meteor.com/package/migrations
No hay nada incorporado para esto. Lo que hice por mí mismo ahora es similar a cómo funciona Rails, pero como parte del inicio en lugar de una tarea separada. Primero cree un Meteor.Collection
llamado Migrations, y luego para cada migración discreta, cree una función bajo el subdirectorio del server
que se ejecuta al inicio. Solo debe ejecutar la migración si no se ejecutó antes, y debe marcar la migración en la colección Migrations una vez que se haya completado.
// database migrations
Migrations = new Meteor.Collection(''migrations'');
Meteor.startup(function () {
if (!Migrations.findOne({name: "addFullName"})) {
Users.find().forEach(function (user) {
Users.update(user._id, {$set: {fullname: users.firstname + '' '' + users.lastname}});
});
Migrations.insert({name: "addFullName"});
}
});
Puede ampliar esta técnica para respaldar las migraciones descendentes (buscar la existencia de una migración dada e invertirla), imponer un orden de clasificación en las migraciones y dividir cada migración en un archivo separado si lo desea.
Sería interesante pensar en un paquete inteligente para automatizar esto.