0

在 Mongoid (Rails) 中,我有 3 个模型:FileVersionUser版本是 embedded_in File,并且FileVersion都属于User (尽管对于File中的所有Version不一定相同)。

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

我试过了:

  1. 几乎任何东西Version.<something>,总是 0 结果(可能是因为Version不是顶级文档?)
  2. File.any_of(user: user, 'versions.user': user): NoMethodError: #<User:0x00000007cd9400> 的未定义方法 `bson_type'
  3. File.any_of(user: user, 'versions.user_id': user.id): 只返回属于User的File,而不是嵌入属于用户的Version的File

如何以数据库友好的方式实现这一点(不获取所有File并迭代它们的Version)?

4

1 回答 1

1

当您说“嵌入式”时,这意味着嵌入式模型(版本)不再是单独的实体,并且没有单独的集合。它作为文档(文件模型对象)的一部分包含在内。

没有集合意味着 -> Pt 1 将返回 nil

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

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

回复:“如何以数据库友好的方式实现这一点?”

仅当嵌入式文档从不打算独立使用或在没有父文档的上下文的情况下毫无意义时才使用。所以访问和嵌入文档的唯一方法是通过父文档。

由于文件和用户都在使用此处的版本,因此您应该考虑为它创建一个单独的集合。(又名标准化数据模型)

您可以在此处阅读有关 mongodb 数据建模的更多信息

于 2015-05-07T19:45:32.487 回答