我有两个收藏。第一个收藏包括学生:
{ "_id" : ObjectId("51780f796ec4051a536015cf"), "name" : "John" }
{ "_id" : ObjectId("51780f796ec4051a536015d0"), "name" : "Sam" }
{ "_id" : ObjectId("51780f796ec4051a536015d1"), "name" : "Chris" }
{ "_id" : ObjectId("51780f796ec4051a536015d2"), "name" : "Joe" }
第二套课程包括:
{
"_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
数组,其中有一个注册该课程的学生名单。当一个学生在网页上查看一门课程时,他需要知道他是否已经注册了这门课程。为此,当代表学生查询 courses
集合时,我们需要查明 students
数组是否已经包含学生的 ObjectId。是否有一种方法可以在查找查询的投影中指定,只有在 students
数组存在的情况下才从 ObjectId
中检索学生?
我试图查看是否可以使用 $elemMatch 运算符,但它面向的是子文档数组。我知道我可以使用聚合框架,但是在这种情况下似乎有些过头了。聚合框架可能不会像单个查询那样快。是否有一种方法可以查询课程集合,以便返回的文档可以采用与此类似的形式?
{
"_id" : ObjectId("51780fb5c9c41825e3e21fc4"),
"name" : "CS 101",
"students" : [
ObjectId("51780f796ec4051a536015d0"),
]
}