![](/img/trans.png)
[英]In Rails, Using Mongoid, How do I find all Models with a valid (not nil) has_one reference?
[英]How do I get all the groups that have all the users I specified in an array in Rails/MongoId?
我有一个Groups
的集合,一个Users
的集合和一个GroupUsers
的集合,其中包含2个字段: group_id
和user_id
。 我想找到具有我在数组中指定的所有用户的所有组。
例。 如果我做:
group1 << user1
group1 << user2
当我尝试找到包含user1
, user2
和user3
,我应该没有任何结果。 但是如果要包含user1
和user2
的组,我应该得到group1
。
我试过了:
GroupUser.where(:user.in => [user1, user3]).group_by(&:group)
但这将返回group1
因为user1
是该组的成员。
谢谢您的帮助。
我们终于找到了解决方案:
class Group
embeds_many :users, class_name: "GroupUser"
scope :with_status, -> (status) do
where(:"users.status" => status )
end
end
class User
end
class GroupUser
embedded_in :group
belongs_to :user
end
然后是Group.where(:"users.user_id".all => [user1.id, user2.id])
非常感谢您的帮助。
(仅适用于ActiveRecord):您可以在Group
类中同时使用having
和group
语句来定义此范围:
class Group < ActiveRecord::Base
scope :with_all_users, ->(users) do
joins(:users)
.where(users: {id: users.map(&:id)})
.group('groups.id')
.having('count(users.id) = ?', users.size)
end
end
然后,您可以像这样使用它来获取具有您作为数组或集合提供的所有用户的所有组:
Group.with_all_users([user1, user2, user3])
看起来您只需要使用all
而不是in
。 请参阅选择文档中的第一个条目。
可查询#全部
添加$ all选择。 文档必须匹配数组中提供的所有值
queryable.all(field: [ 1, 2, 3 ])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.