流星+;MongoDB:数据库模式

流星+;MongoDB:数据库模式,mongodb,meteor,iron-router,simple-schema,Mongodb,Meteor,Iron Router,Simple Schema,我是Meteor的新手,正在尝试找出如何最好地设计这个数据库来存储和发布数据。我认为使用这些软件包是有意义的: 我会在一页上列出一系列课程: Courses = new Mongo.Collection("courses"); Courses.attachSchema(new SimpleSchema({ title: { type: String, label: "Title", max: 200 }, comingSoon: { type:

我是Meteor的新手,正在尝试找出如何最好地设计这个数据库来存储和发布数据。我认为使用这些软件包是有意义的:

我会在一页上列出一系列课程:

Courses = new Mongo.Collection("courses");

Courses.attachSchema(new SimpleSchema({
  title: {
    type: String,
    label: "Title",
    max: 200
  },
  comingSoon: {
    type: boolean,
    label: "Coming Soon?"
  },
  description: {
    type: String,
    label: "Course Description",
    max: 200
  }
}));
以及每门课程的课程集合:

Lessons = new Mongo.Collection("lessons");
Lessons.attachSchema(new SimpleSchema({
  title: {
    type: String,
    label: "Title",
    max: 200
  },
  video: {
    type: String,
    label: "Link to video"
  },
}));
并且有一个管理页面,可以使用autoform软件包创建新的课程/课程


我的问题是如何将课程与相关课程联系起来?我会使用iron:router监听url中的参数,查询两个集合并创建模板布局吗?

您应该有一个与课程/课程关系对应的字段,类似于传统数据库中的字段

例如:

Lessons.attachSchema(new SimpleSchema({
  ...
  courseId: {type: String}, // ID of the corresponding course
}));
或:


您应该有一个与课程/课程关系对应的字段,类似于传统数据库中的字段

例如:

Lessons.attachSchema(new SimpleSchema({
  ...
  courseId: {type: String}, // ID of the corresponding course
}));
或:


mongodb推荐使用的模式是在数据库中进行非规范化

它的意思很简单,就是您没有任何
relational
db模式。在SQL中,您有关系数据库范例,要获取详细数据,您需要使用表进行
Join
。在mongodb中,将整个对象放在这里,而不是将引用放在文档(行)中。所以实际上没有
join

在你的课程模式中,你可以这样做

Schemas.Course=newsimpleschema(…)


如果您真的想以
SQL方式使用数据库
,有一个方便的包
[publish composite][1]
,它将帮助您
加入(人工)
您的表/集合。

mongodb推荐的模式是在数据库中进行非规范化

它的意思很简单,就是您没有任何
relational
db模式。在SQL中,您有关系数据库范例,要获取详细数据,您需要使用表进行
Join
。在mongodb中,将整个对象放在这里,而不是将引用放在文档(行)中。所以实际上没有
join

在你的课程模式中,你可以这样做

Schemas.Course=newsimpleschema(…)

如果您真的想以
SQL方式使用数据库
,有一个方便的软件包
[publish composite][1]
,它将帮助您
加入(人工)
您的表/集合

course: {
    type: Schemas.Course
}