我有两个收藏。第一个集合包含学生:
{ "_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。有没有办法在find查询的投影中指定仅当学生ObjectId
存在时才从students
数组中检索它?
我尝试查看是否可以使用$elemMatch运算符,但它是针对一系列子文档的。我知道我可以使用聚合框架,但在这种情况下,它似乎有点过头了。聚合框架可能不会像单个find查询那样快。有没有一种方法可以查询课程集合,以便返回的文档可以是类似于下面的形式?
{
"_id" : ObjectId("51780fb5c9c41825e3e21fc4"),
"name" : "CS 101",
"students" : [
ObjectId("51780f796ec4051a536015d0"),
]
}
https://stackoverflow.com/questions/16198429
复制相似问题