我刚接触 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/