Mongodb Mongoid:检索其_id存在于另一个集合中的文档
我试图从一个集合中获取文档,因为在另一个集合中存在对这些文档的引用 假设我有两个集合Mongodb Mongoid:检索其_id存在于另一个集合中的文档,mongodb,mongoid,mongodb-ruby,Mongodb,Mongoid,Mongodb Ruby,我试图从一个集合中获取文档,因为在另一个集合中存在对这些文档的引用 假设我有两个集合用户和课程,模型如下所示: 用户:{u id,name} 课程:{u id,name,user\u id} 注意:这只是一个假设的例子,而不是实际的用例。因此,让我们假设在课程的name字段中可以找到重复项。让我们将课程精简为课程注册 这里,我在课程中维护对用户的引用,其中用户id持有用户的\u id。请注意,它存储为字符串 现在,我想检索注册到特定课程集的所有用户 我知道这可以通过两个查询来完成。也就是说,
用户
和课程
,模型如下所示:
- 用户:
{u id,name}
- 课程:
{u id,name,user\u id}
课程
的name字段中可以找到重复项。让我们将课程精简为课程注册
这里,我在课程
中维护对用户
的引用,其中用户id
持有用户
的\u id
。请注意,它存储为字符串
现在,我想检索注册到特定课程集的所有用户
我知道这可以通过两个查询来完成。也就是说,首先运行一个查询,并从课程集合的课程
集合中获取用户id
字段。然后使用中的$in
和在上一次查询中检索到的用户ID查询用户
集合。但是,如果文档的数量达到数万或更多,这可能并不好
在一个查询中是否有更好的方法来实现这一点?您所说的是一个典型的sql连接。但这在mongodb是不可能的。正如您已经建议的,您可以在两个不同的查询中执行此操作
还有一种方法可以处理它。这并不完全是一个解决方案,而是非SQL数据库中的有效解决方法。即在同一集合中存储访问频率最高的字段
您可以将一些用户
集合字段存储在课程
集合中作为嵌入字段
Course : {
_id : 'xx',
name: 'yy'
user:{
fname : 'r',
lname :'v',
pic: 's'
}
}
如果要从用户集合中检索的字段子集较少,则这是一种很好的方法。您可能想知道存储在课程
集合中的冗余用户数据,但这正是mongodb强大的原因。这是一次插入,但您的查询速度会快得多 谢谢你的回复。把问题扩大一点。假设我也想使用分页。两个查询的方法不起作用,不是吗?我无法检索注册到特定课程集的用户页面。您的替代解决方案也可以使用分页。