我有两个收藏。第一个集合包含学生:
{ "_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。有没有一种方法可以在查找查询的投影中指定仅在数组存在的情况下才ObjectId
从students
数组中检索学生?
我试图看看是否可以使用$ elemMatch运算符,但它适用于一系列子文档。我知道我可以使用聚合框架,但在这种情况下,这样做似乎有些过头了。聚合框架可能不会像单个查找查询那样快。有没有一种方法可以查询课程集,以便返回的文档可以采用与此类似的形式?
{
"_id" : ObjectId("51780fb5c9c41825e3e21fc4"),
"name" : "CS 101",
"students" : [
ObjectId("51780f796ec4051a536015d0"),
]
}