我正在尝试根据另一个集合中对这些文档的引用的存在从一个集合中获取文档。
假设我有两个集合 Users
和 Courses
,模型如下所示:
- 用户:
{_id, name}
- 类(class):
{_id, name, user_id}
注意:这只是一个假设示例,并非实际用例。因此,让我们假设 Course
的名称字段中的重复项没有问题。让我们细化 Course as CourseRegistrations
。
在这里,我在 Course
中维护对 User
的引用,其中 user_id
持有 _Id
用户
。并注意它存储为字符串。
现在我想检索注册到一组特定类(class)的所有用户。
我知道这可以通过两个查询来完成。即首先运行查询并从类(class)集的 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 强大的原因。它是一次性插入,但您的查询会快很多。
关于mongodb - Mongoid:检索其 _id 存在于另一个集合中的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13229196/