ほとんどの場合、個別のオブジェクト タイプを個別のコレクションに入れると便利です。
1対多の関係があるとしましょう:
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 の読み取り操作に関する詳細情報。