Подтвердить что ты не робот

Как выполнять миграцию базы данных Meteor?

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

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

4b9b3361

Ответ 1

Для этого ничего не создано. То, что я сделал сейчас, похоже на то, как работает Rails, но как часть запуска вместо отдельной задачи. Сначала создайте Meteor.Collection с именем Migrations, а затем для каждой дискретной миграции создайте функцию под подкаталогом 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"});
  }
});

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

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

Ответ 2

Как указал Арам в комментарии, p ercolate: migrations пакет дает вам то, что вам нужно. Пример

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