繁体   English   中英

如何获得在Rails / MongoId中的数组中指定了所有用户的所有组?

[英]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_iduser_id 我想找到具有我在数组中指定的所有用户的所有组。

例。 如果我做:

group1 << user1
group1 << user2

当我尝试找到包含user1user2user3 ,我应该没有任何结果。 但是如果要包含user1user2的组,我应该得到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类中同时使用havinggroup语句来定义此范围:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM