如何在Rails / MongoId中获取具有我在数组中指定的所有用户的所有组?

时间:2015-02-23 14:23:40

标签: ruby-on-rails mongodb 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是该群组的成员。

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

我们终于找到了解决方案:

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])

非常感谢你的帮助。

答案 1 :(得分:-1)

(仅限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])

答案 2 :(得分:-1)

您似乎只需使用all代替in。请参阅selection doc中的第一个条目。

  

可查询所有#

     

添加$ all选择。文档必须符合中提供的所有值   阵列

queryable.all(field: [ 1, 2, 3 ])