我正在尝试根据对另一个集合中对这些文档的参考的存在从集合中获取文档。
假设我有两个集合Users
和Courses
,模型看起来像这样:
- 用户:
{_id, name}
- 课程:
{_id, name, user_id}
注意:这只是一个假设的例子,而不是实际用例。因此,让我们假设重复项在Course
的名称字段中很好。让我们瘦的 Course as CourseRegistrations
。
在这里,我在Course
中维护对User
的引用,其中user_id
持有User
的CC_11。并请注意,它存储为字符串。
现在,我想检索注册到一组特定课程的所有用户。
我知道可以通过两个查询来完成。首先运行查询,并从Course
集合中获取users_id
字段,以供课程集。然后,使用$in
和上一个查询中检索的用户ID查询User
集合。但是,如果文档的数量在数万或更多。
有没有更好的方法在一个查询中做到这一点?
您所说的是典型的sql join
。但这在蒙古德(Mongodb)中不可能。正如您所建议的那样,您可以在2个不同的查询中做到这一点。
还有另一种方法来处理它。它不是完全的解决方案,而是NONSQL数据库中的有效解决方法。那就是将最常访问的字段存储在同一集合中。
您可以存储一些user
收集字段,在course
集合中以嵌入式字段。
Course : {
_id : 'xx',
name: 'yy'
user:{
fname : 'r',
lname :'v',
pic: 's'
}
}
如果您打算从用户收集中检索的字段子集的子集较少,这是一种很好的方法。您可能想知道course
集合中存储的冗余用户数据,但这正是使MongoDB强大的原因。它是一次插入的,但是您的查询速度会更快。