如何获取用户的所有嵌入式 mongoid 文档

How to get all embedded mongoid documents for a user

在 Mongoid (Rails) 中我有 3 个模型:FileVersionUserVersion 是 embedded_in FileFileVersion belongs_to 一个 User (尽管 FileVersion 不一定相同).

现在我想检索属于特定 User 或嵌入在 中的所有 Version ]File 属于同一个 User.

我试过:

  1. 几乎所有 Version.<something>,总是 0 个结果(可能是因为 Version 不是顶级文档?)
  2. File.any_of(user: user, 'versions.user': user): NoMethodError: #
  3. 的未定义方法“bson_type”
  4. File.any_of(user: user, 'versions.user_id': user.id):只有 returns File 属于 User,而不是 Files that embed Versions 属于用户

如何以数据库友好的方式实现这一点(不获取所有 Files 并遍历它们的 Versions)?

当您说 'Embedded' 时,这意味着嵌入式模型(版本)不再是一个单独的实体并且没有单独的 collection. It is included as a part of the Document(文件模型 object)。

否 collection 暗示 -> Pt 1 将 return nil

Pt2 这也意味着用户-版本关系不存在

在 Pt3 中,'versions.user_id' 查询被简单地忽略了。

回复:"How can this be achieved in a database friendly way?"

仅当嵌入文档永远不会独立使用或在没有 parent 文档上下文的情况下毫无意义时才使用它们。 因此,访问和嵌入文档的唯一方法是 through parent 文档。

由于此处的 Version 被 File 和 User 使用,您应该考虑为其创建一个单独的 collection。 (又名规范化数据模型)

您可以阅读更多关于 mongodb 数据建模的内容 here