Вопрос по database – Метеор, как выполнить миграцию базы данных?

23

Как вы выполняете миграцию базы данных с Meteor? В Ruby on Rails есть ActiveRecord :: Migration. Есть ли эквивалентный механизм в Метеоре?

Например, я делаю приложение с некоторыми пользовательскими данными. Я храню данные в Mongo, используя формат JSON. Приложение изменится, и схема базы данных JSON должна измениться. Я могу написать метод миграции для изменения схемы, однако я хочу, чтобы он запускался только в том случае, если база данных сервера устарела.

Ваш Ответ

3   ответа
5

Я создал умный пакет для этого варианта использования.
Увидетьhttps://atmosphere.meteor.com/package/migrations

Error: User Rate Limit Exceededgithub.com/percolatestudio/meteor-migrationsError: User Rate Limit Exceededgithub.com/rantav/meteor-migrations.
5

Как уже указывал Арам в комментарии,ercolate: Миграции Пакет дает вам то, что вам нужно. Образец

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}
});
35

что я сделал сам сейчас, похоже на работу Rails, но как часть запуска, а не как отдельная задача. Сначала создайтеMeteor.Collection Миграции, а затем для каждой отдельной миграции создайте функцию подserver подкаталог, который запускается при запуске. Он должен запускать миграцию только в том случае, если он не запускался ранее, и должен отмечать миграцию в коллекции Migrations, как только она будет завершена.

// 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"});
  }
});

Вы можете расширить эту технику для поддержки миграций вниз (отыщите наличие данной миграции и отмените ее), установите порядок сортировки для миграций и разделите каждую миграцию в отдельный файл, если хотите.

Было бы интересно подумать об умном пакете для автоматизации этого.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededlocking mechanism

Похожие вопросы