25

Meteor でデータベースの移行をどのように実行しますか? Ruby on Rails には ActiveRecord::Migration があります。Meteor に同等のメカニズムはありますか?

たとえば、いくつかのユーザー データを使用してアプリを作成します。JSON形式を使用してMongoにデータを保存しています。アプリが変更され、JSON データベース スキーマを変更する必要があります。スキーマを変更するための移行メソッドを作成できますが、サーバー データベースが古い場合にのみ実行する必要があります。

4

3 に答える 3

36

これには何も組み込まれていません。私が今のところ自分で行ったことは、Rails の動作と似ていますが、個別のタスクではなく、スタートアップの一部としてです。最初にMeteor.CollectionMigrations という名前のファイルを作成し、個別の移行ごとに、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"});
  }
});

この手法を拡張してダウン マイグレーションをサポートし (特定のマイグレーションの存在を探して元に戻す)、マイグレーションに並べ替え順序を適用し、必要に応じて各マイグレーションを個別のファイルに分割することができます。

これを自動化するためのスマートなパッケージについて考えるのは興味深いことです。

于 2012-04-28T19:34:20.290 に答える
6

Aram がコメントで既に指摘したように、percolate: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}
});
于 2015-12-09T08:12:25.887 に答える