rails mongoid标准通过关联查找



我试图通过关联的用户名找到一条记录,该记录包含在belongs_to关系中,但不起作用。

文章属于用户用户有许多文章

Article.where(user_id: someid)工作正常,但我希望使用存储在Users表中的用户名作为参考。

Article.includes(:user).where(:username => "erebus")
Article.includes(:user).where("user.username" => "erebus")

我还有identity_map_enabled: true

Article.includes(:user).inclusions返回关系细节

不起作用,我有什么不明白的?

您必须记住,mongodb中没有联接。在关系数据库中,includes形成一个联接查询,您可以在查询中使用两个表中的列。然而,由于mongodb中缺少联接,所以不可能实现同样的连接。

在mongoid中,includes只保存了一堆数据库调用。它获取并存储身份映射中的相关记录,以便快速检索,但在查询时,一个查询只能处理一个集合。

如果你需要基于用户名的文章,我建议你做以下工作:

user_ids = User.where(username: 'erebus').only(:_id).map(&:_id)
articles = Article.where(:user_id.in => user_ids)

您可以根据rubish的建议将其缩短一点:

user_ids = User.where(username: 'erebus').pluck(:id)
articles = Article.where(:user_id.in => user_ids)

或者一个衬垫:

articles = Article.where(:user_id.in => User.where(username: 'erebus').pluck(:id))

最新更新