【发布时间】:2013-04-18 09:13:16
【问题描述】:
我有两个系列。第一个集合包含学生:
{ "_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"),
]
}
【问题讨论】:
标签: mongodb