我试图根据在另一个集合中存在对这些文档的引用来从集合中获取文档。
假设我有两个集合Users
和Courses
,模型看起来像这样:
{_id, name}
{_id, name, user_id}
注意:这只是一个假设的例子,而不是实际的用例。因此,我们假设Course
的名称字段中的重复项很好。让我们变瘦Course as CourseRegistrations
。
在此,我保留User
中Course
的引用,user_id
持有_Id
User
。并注意它存储为字符串。
现在我想要检索注册到特定课程集的所有用户。
我知道可以通过两个查询完成。这是首先运行查询并从users_id
集合获取该组课程的Course
字段。然后使用User
和上一个查询中检索到的用户ID查询$in
集合。但如果文件数量达到数万或更多,这可能就不太好了。
有没有更好的方法只在一个查询中执行此操作?
答案 0 :(得分:1)
您所说的是典型的sql join
。但这在mongodb中是不可能的。正如您所建议的,您可以在2个不同的查询中执行此操作。
还有一种方法可以处理它。它不完全是一个解决方案,而是NonSql数据库中的有效解决方法。那就是将最常访问的字段存储在同一个集合中。
您可以将user
集合中的部分course
集合字段存储为嵌入字段。
Course : {
_id : 'xx',
name: 'yy'
user:{
fname : 'r',
lname :'v',
pic: 's'
}
}
如果您打算从用户集合中检索的字段子集较少,这是一种很好的方法。您可能想知道存储在course
集合中的冗余用户数据,但这正是使mongodb强大的原因。它是一次性插入,但您的查询将更快。