大多数时候,将单独的对象类型放入单独的集合中是很有用的。
假设我们有一对多的关系:
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"});
有关MongoDB 读取操作的更多信息。