私は2つのコレクションを持っています。最初のコレクションには生徒が含まれています。
{ "_id" : ObjectId("51780f796ec4051a536015cf"), "name" : "John" }
{ "_id" : ObjectId("51780f796ec4051a536015d0"), "name" : "Sam" }
{ "_id" : ObjectId("51780f796ec4051a536015d1"), "name" : "Chris" }
{ "_id" : ObjectId("51780f796ec4051a536015d2"), "name" : "Joe" }
2 番目のコレクションにはコースが含まれています。
{
"_id" : ObjectId("51780fb5c9c41825e3e21fc4"),
"name" : "CS 101",
"students" : [
ObjectId("51780f796ec4051a536015cf"),
ObjectId("51780f796ec4051a536015d0"),
ObjectId("51780f796ec4051a536015d2")
]
}
{
"_id" : ObjectId("51780fb5c9c41825e3e21fc5"),
"name" : "Literature",
"students" : [
ObjectId("51780f796ec4051a536015d0"),
ObjectId("51780f796ec4051a536015d0"),
ObjectId("51780f796ec4051a536015d2")
]
}
{
"_id" : ObjectId("51780fb5c9c41825e3e21fc6"),
"name" : "Physics",
"students" : [
ObjectId("51780f796ec4051a536015cf"),
ObjectId("51780f796ec4051a536015d0")
]
}
各コース ドキュメントにはstudents
、コースに登録されている学生のリストを含む配列が含まれています。学生が Web ページでコースを表示するとき、コースに登録済みかどうかを確認する必要があります。そのためにはcourses
、生徒に代わってコレクションがクエリされるときに、students
配列に生徒の ObjectId が既に含まれているかどうかを確認する必要があります。検索クエリの射影で指定して、配列ObjectId
から学生students
が存在する場合にのみ取得する方法はありますか?
$elemMatch 演算子を使用できるかどうかを確認しようとしましたが、サブドキュメントの配列を対象としています。集約フレームワークを使用できることは理解していますが、この場合はやり過ぎのようです。集計フレームワークは、おそらく単一の検索クエリほど高速ではありません。返されたドキュメントがこれに似た形式になるように、コース コレクションをクエリする方法はありますか?
{
"_id" : ObjectId("51780fb5c9c41825e3e21fc4"),
"name" : "CS 101",
"students" : [
ObjectId("51780f796ec4051a536015d0"),
]
}