KJW*_*KJW 9 database-design mongodb meteor
我遇到了一个我要问自己的场景我是否需要将每个实体(一个Classroom有很多学生)放入单独的Meteor.collection对象中,或者将一组学生嵌入教室对象中并拥有一个Meteor.collection Classroom对象.
我的直觉告诉我将课堂和学生放在他们自己的Meteor.collections中,但我不确定如何在两个Meteor集合对象之间建立一对多的关系.
如果有更多传统的一对多,多对多关系转化为Meteor的做事方式会怎样?
我的问题源于这样一个事实:.aggregate()不受支持,并且意识到如果没有进行递归循环来抓取嵌套和嵌入文档,在存在Meteor集合的父文档中(例如Classroom)是不可能的.
Tim*_*sch 16
大多数情况下,将单独的对象类型放入单独的集合中非常有用.
假设我们有一对多的关系:
Classrooms.insert({
  _id: "sdf8ad8asdj2jef",
  name: "test classroom"
});
Students.insert({
  _id: "lof8gzanasd9a7j2n",
  name: "John"
  classroomId: "sdf8ad8asdj2jef"
});
让所有学生上课sdf8ad8asdj2jef:
Students.find({classroomId: "sdf8ad8asdj2jef"});
与学生一起上课lof8gzanasd9a7j2n:
var student = Studtents.findOne("lof8gzanasd9a7j2n");
var classroom = Classrooms.find(student.classroomId);
当您打算使用Meteor.publish()和Meteor.subscribe()时,将对象放入单独的集合中尤其有用.当您只想将数据发布到与用户真正相关的客户端时,Meteor.publish()非常方便.
以下仅发布与给定人员在一起的学生classroomId.(因此客户端不必从服务器数据库下载所有学生对象.只有那些相关的.)
Meteor.publish("students", function (classroomId) {
  return Students.find({classroomId: classroomId});
});
许多关系也不那么复杂:
Classrooms.insert({
  _id: "sdf8ad8asdj2jef",
  name: "test classroom"
  studentIds: ["lof8gzanasd9a7j2n"]
});
Students.insert({
  _id: "lof8gzanasd9a7j2n",
  name: "John"
  classroomIds: ["sdf8ad8asdj2jef"]
});
让所有学生上课sdf8ad8asdj2jef:
Students.find({classroomIds: "sdf8ad8asdj2jef"});
与学生一起上所有教室lof8gzanasd9a7j2n:
Classrooms.find({studentIds: "lof8gzanasd9a7j2n"});
有关MongoDBs读取操作的更多信息.