在Mongoid(Rails)中我有3个模型:文件,版本和用户。 版本是embedded_in 文件,文件和版本都属于用户(虽然对于文件中的所有版本,不一定相同。
现在,我想检索属于特定用户的所有版本,或者嵌入属于文件的文件相同的用户。
我试过了:
Version.<something>
,总是0结果(可能是因为 Version 不是顶级文档?)File.any_of(user: user, 'versions.user': user)
:NoMethodError:#&lt; User:0x00000007cd9400&gt; File.any_of(user: user, 'versions.user_id': user.id)
:仅返回属于用户的文件,而不是文件,它们嵌入版本< / em>属于用户如何以数据库友好的方式实现(不获取所有文件并迭代 Version )?
答案 0 :(得分:1)
当您说“嵌入”时,这意味着嵌入式模型(版本)不再是单个实体,也没有单独的collection。它包含在Document(文件模型对象)的一部分中。
没有收集暗示 - &gt; Pt 1将返回nil
Pt2这也意味着用户 - 版本关系不存在
在Pt3中,'versions.user_id'查询被忽略。
回复:“如何以数据库友好的方式实现这一目标?”
嵌入式文档仅在从不打算独立使用时使用,或者在没有父文档上下文的情况下毫无意义。 因此,访问和嵌入文档的唯一方法是through父文档。
由于文件和用户都在使用此处的版本,因此您应该考虑为其创建单独的集合。 (又称标准化数据模型)
您可以阅读有关mongodb数据建模here
的更多信息