根据父属性查询Mongodb集合

时间:2011-11-26 22:09:10

标签: ruby-on-rails mongodb mongoid

我有一个属于用户的帖子文档,用户有一个:approved属性。如何使用Mongodb s.t查询我的帖子我只收到用户:approved => true的位置?

我可以编写一个创建新数组的循环,但这似乎效率低下。

2 个答案:

答案 0 :(得分:1)

MongoDB没有任何连接的概念。

您已在评论中声明PostsUsers是单独的集合,但您的查询明确涉及来自两个集合的数据,这意味着加入。

  

我可以编写一个创建新数组的循环,但这似乎效率低下。

SQL中的连接操作基本上是服务器上发生的循环。如果服务器端没有联接支持,则必须自行创建。

请注意,许多库(如Morphia)实际上都内置了一些此功能。你正在使用可能有一些支持的Mongoid,但你必须做一些狩猎。

答案 1 :(得分:0)

最简单的方法是查询已获批准的用户的唯一用户ID,然后查询海报的user_id位于该集合中的帖子文档。

正如Rubish所说,你可以通过在帖子文档中添加一个已批准的字段来去标准化。当用户的批准状态被切换(它们被批准或未批准)时,对帖子集合进行更新,对于所有该用户的帖子,您可以切换非规范化的批准字段。

使用非规范化方法可以让您执行一个查询而不是两个查询(简化最常见情况下的逻辑)并且维护起来并不是太难。

如果这有意义,请告诉我。