Database Meteor如何执行数据库迁移?

Database Meteor如何执行数据库迁移?,database,upgrade,migrate,meteor,downgrade,Database,Upgrade,Migrate,Meteor,Downgrade,如何使用Meteor执行数据库迁移?有了RubyonRails,就有了ActiveRecord::Migration。流星中有没有一种等效的机制 例如,我用一些用户数据制作了一个应用程序。我使用JSON格式将数据存储在Mongo中。应用程序更改,JSON数据库模式需要更改。我可以编写一个迁移方法来更改模式,但是,我只希望在服务器数据库过期时运行该方法。没有为此内置任何内容。目前我自己所做的工作与Rails的工作方式类似,只是作为启动的一部分,而不是单独的任务。首先创建一个名为Migrations

如何使用Meteor执行数据库迁移?有了RubyonRails,就有了ActiveRecord::Migration。流星中有没有一种等效的机制


例如,我用一些用户数据制作了一个应用程序。我使用JSON格式将数据存储在Mongo中。应用程序更改,JSON数据库模式需要更改。我可以编写一个迁移方法来更改模式,但是,我只希望在服务器数据库过期时运行该方法。

没有为此内置任何内容。目前我自己所做的工作与Rails的工作方式类似,只是作为启动的一部分,而不是单独的任务。首先创建一个名为Migrations的
Meteor.Collection
,然后对于每个离散的迁移,在启动时运行的
server
子目录下创建一个函数。它应该只在以前没有运行过迁移的情况下运行迁移,并且应该在迁移完成后在迁移集合中标记迁移

// 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"});
  }
});
您可以扩展此技术以支持向下迁移(查找给定迁移的存在并将其反转),对迁移强制执行排序顺序,并根据需要将每个迁移拆分为单独的文件


考虑一个智能包来实现自动化是很有趣的。

我为这个用例创建了一个智能包。

请参见

正如Aram在评论中指出的那样,p软件包可以满足您的需要。样品

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

我可能最终会有动力用这种逻辑来制作一个智能包。这仍然比晦涩难懂的Meteor方法要好。如果在同一数据库上运行多台服务器(多个web服务器或微服务),那么当5台服务器都运行相同的查询时,您可能会遇到问题。这个软件包似乎使用了一种新的设计,在我看来,它的设计比以前更干净。