首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MongoDB:如何确定数组字段是否包含元素?

MongoDB:如何确定数组字段是否包含元素?
EN

Stack Overflow用户
提问于 2013-04-25 01:26:07
回答 1查看 158.4K关注 0票数 80

我有两个收藏。第一个集合包含学生:

代码语言:javascript
运行
复制
{ "_id" : ObjectId("51780f796ec4051a536015cf"), "name" : "John" }
{ "_id" : ObjectId("51780f796ec4051a536015d0"), "name" : "Sam" }
{ "_id" : ObjectId("51780f796ec4051a536015d1"), "name" : "Chris" }
{ "_id" : ObjectId("51780f796ec4051a536015d2"), "name" : "Joe" }

第二个集合包含课程:

代码语言:javascript
运行
复制
{
        "_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查询那样快。有没有一种方法可以查询课程集合,以便返回的文档可以是类似于下面的形式?

代码语言:javascript
运行
复制
{
        "_id" : ObjectId("51780fb5c9c41825e3e21fc4"),
        "name" : "CS 101",
        "students" : [
                ObjectId("51780f796ec4051a536015d0"),
        ]
}
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16198429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档