您如何使用Meteor执行数据库迁移?有了Ruby on rails,就有了ActiveRecord::Migration."Meteor "中有没有类似的机制?

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

推荐答案

这里面没有内置的东西.目前我自己所做的工作与Rails的工作方式类似,只是作为启动的一部分,而不是单独的任务.首先创建一个名为Migrations的Meteor.Collection,然后对于每个离散迁移,在启动时运行的server子目录下创建一个函数.只有在以前没有运行过迁移时,它才应该运行迁移,完成迁移后,它应该在Migrations集合中标记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"});
  }
});

您可以扩展此技术以支持向下迁移(查找给定迁移的存在并将其反转),对迁移强制执行排序顺序,并根据需要将每个迁移拆分为单独的文件.

想一想用于自动化这一点的智能软件包将是很有趣的.

Database相关问答推荐

mongodb聚合从另一个查询中获取值

数据库约束 - 保留(keep)还是忽略(ignore)?

存储所有排列的模式数据库

如何在 Windows 中安装 InfluxDB?

如何在 Oracle 中找到指向一条记录的外键依赖项?

如何在 Play 2.0 中 for each 环境设置不同的数据库?

将数据库表用作作业(job)队列的最佳方式是什么?

customer客户表的数据库 struct ,每个客户有很多订单,每个订单有很多商品

获取错误函数 to_date(timestamp without time zone, unknown) 不存在

存储并仍然索引加密客户数据的最佳方式是什么?

MySQL:LAST_INSERT_ID() 返回 0

Django:将博客条目查看次数加一,这有效率吗?

省略日期中的毫秒数

使用 PHP/PDO 判断数据库表是否存在

Sqlite 和 Python - 使用 fetchone() 返回字典?

Redis Pub/Sub 和 Redis Stream 之间的主要区别是什么?

Django + PostgreSQL:如何重置主键?

存储信用卡号 - PCI?

查询 oracle clob 列

将 NULL 插入 MySQL 时间戳