mongodb - 如何处理 meteor /蒙戈中数据库的更改?

标签 mongodb meteor

我刚接触 Meteor 和 Mongo 几个小时,有 Rails 背景,并试图了解迁移的工作原理 - 或者可能不工作?

我有一个 server/bootstrap.js 文件,我用它来播种一些数据:

// if the database is empty on server start, create some sample data.
Meteor.startup(function () {
  if (Users.find().count() === 0) {
    var userData = [
        { name: 'Cool guy' },
        { name: 'Other dude' }
    ];

    for (var i = 0; userData.length; i++) {
      var userId = Users.insert({
        name: userData[i].name
      });
    }
  }
});

似乎每次我想要更改数据库(例如添加新字段)时,我都必须运行 meteor Reset 才能让它接受更改。

但是,如果我通过想要保留的 UI 创建记录或其他数据,会发生什么情况?在 Rails 中,使用 MySQL 或 PostgreSQL,我会创建一个迁移来创建新字段,而不会破坏整个数据库。

这如何与 Meteor 和 Mongo 配合使用?还考虑从开发到生产推出新变革的案例。谢谢!

-- 更新:2013/09/24 --

显然,Mongo 的无模式特性减少或消除了迁移的需要。就我而言,由于用户计数检查,修改 userData 以添加新字段在最初运行后将不起作用 - 这就是我继续运行 meteor Reset 的原因。我需要重新考虑我的方法并学习。

也就是说,有些项目使用迁移,例如 Telescope:https://github.com/SachaG/Telescope/blob/master/server/migrations.js

我还在 http://try.mongodb.org/ 找到了该教程有用。

最佳答案

首先,您的代码完全有效。你知道这一点。

mrt reset给你一个“新鲜”的空数据库(如前所述)。 如果您想重置特定集合,可以这样做: MyCollection.remove({});

但是你必须了解NoSQL的本质:数据没有约束。它可以被称为NoREL(因为不是关系数据库,来源:Wikipedia)。

MongoDB 也是无模式的。 这意味着您可以在数据中使用您想要的任何字段。如果您需要的话,这取决于您(程序员)来实现特定的约束。换句话说,mongo 端没有逻辑。它应该接受你扔给它的任何数据,就像 Hubert OG 演示的那样。您的代码片段可能是:

// if the database is empty on server start, create some sample data.
Meteor.startup(function () {
   if (Users.find().count() === 0) {
    var userData = [
      { name: 'Cool guy' },
      { name: 'Other dude' },
      { nickname: 'Yet another dude' }           // this line shows that mongo takes what you throw him
    ];

    for (var i = 0; userData.length; i++) {
      var userId = Users.insert({
        name: userData[i].name
      });
    }
  }
});

来源:http://www.mongodb.com/nosql

那里不需要迁移。您只需在应用程序代码中添加逻辑即可。

注意:要导入/导出数据库,您可以查看那里:mongo import/export doc ,也许在 db.copyDatabase(origin, destination, hostname)功能。

关于mongodb - 如何处理 meteor /蒙戈中数据库的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18939822/

相关文章:

具有文档字段比较的 MongoDB partialFilterExpression

meteor - 使用陨石包的特定分支

spring - 通过多个id获取文档

node.js - 与 MongoDB 而不是 Redis 一起使用的 Kue 有什么好的替代品?

node.js - 使用 docker 的两个 meteor 项目 - ECONNREFUSED 127.0.0.1 :8082

javascript - 如何在 Meteor.js 中设置数据库?

javascript - eslint 脚本因meteor run npm eslint 失败

node.js - 更新到 Meteor 1.4 时出错

node.js - 为什么图像在node js中保存为文本文件

spring - 无法解决 Spring 安全性