如何获取用户的所有嵌入式 mongoid 文档
How to get all embedded mongoid documents for a user
在 Mongoid (Rails) 中我有 3 个模型:File、Version 和 User。 Version 是 embedded_in File,File 和 Version belongs_to 一个 User (尽管 FileVersion 不一定相同).
现在我想检索属于特定 User 或嵌入在 中的所有 Version ]File 属于同一个 User.
我试过:
- 几乎所有
Version.<something>
,总是 0 个结果(可能是因为 Version 不是顶级文档?)
File.any_of(user: user, 'versions.user': user)
: NoMethodError: # 的未定义方法“bson_type”
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
在 Mongoid (Rails) 中我有 3 个模型:File、Version 和 User。 Version 是 embedded_in File,File 和 Version belongs_to 一个 User (尽管 FileVersion 不一定相同).
现在我想检索属于特定 User 或嵌入在 中的所有 Version ]File 属于同一个 User.
我试过:
- 几乎所有
Version.<something>
,总是 0 个结果(可能是因为 Version 不是顶级文档?) File.any_of(user: user, 'versions.user': user)
: NoMethodError: # 的未定义方法“bson_type”
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