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

时间:2015-05-06 19:32:50

标签: ruby-on-rails mongoid mongoid4

在Mongoid(Rails)中我有3个模型:文件版本用户版本是embedded_in 文件文件版本都属于用户(虽然对于文件中的所有版本,不一定相同。

现在,我想检索属于特定用户的所有版本,或者嵌入属于文件文件相同的用户

我试过了:

  1. 几乎所有Version.<something>,总是0结果(可能是因为 Version 不是顶级文档?)
  2. File.any_of(user: user, 'versions.user': user):NoMethodError:#&lt; User:0x00000007cd9400&gt;
  3. 的未定义方法`bson_type'
  4. File.any_of(user: user, 'versions.user_id': user.id):仅返回属于用户文件,而不是文件,它们嵌入版本< / em>属于用户
  5. 如何以数据库友好的方式实现(不获取所有文件并迭代 Version )?

1 个答案:

答案 0 :(得分:1)

当您说“嵌入”时,这意味着嵌入式模型(版本)不再是单个实体,也没有单独的collection。它包含在Document(文件模型对象)的一部分中。

没有收集暗示 - &gt; Pt 1将返回nil

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

在Pt3中,'versions.user_id'查询被忽略。

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

嵌入式文档仅在从不打算独立使用时使用,或者在没有父文档上下文的情况下毫无意义。 因此,访问和嵌入文档的唯一方法是through父文档。

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

您可以阅读有关mongodb数据建模here

的更多信息