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强大的原因。这是一次插入,但您的查询速度会快得多

谢谢你的回复。把问题扩大一点。假设我也想使用分页。两个查询的方法不起作用,不是吗?我无法检索注册到特定课程集的用户页面。您的替代解决方案也可以使用分页。