mongodb - Mongoid:检索其 _id 存在于另一个集合中的文档

标签 mongodb mongoid mongodb-ruby

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

假设我有两个集合 UsersCourses,模型如下所示:

  • 用户:{_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/

相关文章:

ruby - 使用 Ruby 驱动程序的 MongoDB 组

ruby - Rails 3.1 和 MongoDB - ActiveRecords?

ruby-on-rails - Mongodb 查询说 "wrong number of arguements (2 for 1)"

mongodb - 使用mongodb在UTC中存储日期时如何处理时区问题?

mongodb - 为什么 mongo 没有通过命令行连接到我的表?

ruby - Mongoid 3.1.4 调用 'has_key?' 时未定义方法 'Document.create'

database - 如何将 mongoose 查询结果转换为纯 javascript?

java - JDK 17 spring boot 无法使 java.time.LocalDateTime 私有(private)化

mongodb - 获取更新文档的数量 mongo