2

我正在尝试根据对另一个集合中这些文档的引用的存在从集合中获取文档。

假设我有两个系列UsersCourses模型如下所示:

  • 用户:{_id, name}
  • 课程:{_id, name, user_id}

注意:这只是一个假设的例子,而不是实际的用例。所以让我们假设在Course. 让我们瘦Course as CourseRegistrations

在这里,我在UserCourse保持user_id_Id的引用User。请注意,它存储为字符串。

现在我想检索注册到一组特定课程的所有用户。

我知道可以通过两个查询来完成。那是首先运行一个查询并从该组课程的集合中获取该users_id字段。Course然后通过使用和上一个查询中检索到的用户 id来查询User集合。$in但是如果文档的数量在数万或更多,这可能并不好。

有没有更好的方法在一个查询中做到这一点?

4

1 回答 1

1

你说的是典型的sql join。但这在 mongodb 中是不可能的。正如您已经建议的那样,您可以在 2 个不同的查询中执行此操作。

还有另一种处理方法。它不完全是一个解决方案,而是 NonSql 数据库中的有效解决方法。那就是将最常访问的字段存储在同一个集合中。

您可以将某些user集合字段存储在集合内course作为嵌入字段。

Course : {
   _id : 'xx',
   name: 'yy'
   user:{
       fname : 'r',
       lname :'v',
       pic: 's'
   }  
}

如果您打算从用户集合中检索的字段子集较少,这是一个很好的方法。您可能想知道course集合中存储的冗余用户数据,但这正是 mongodb 强大的原因。它是一次性插入,但您的查询会快得多。

于 2012-11-05T14:41:05.090 回答