Mongoid 范围:如何检查元素是否在集合中

Mongoid scope: how to check if an element is in collection

我有以下 class:

class Team
  ...
  has_many :players
end

class Player
  ...
  field :gender, type: String
  belongs_to :Team
end

我想在 class Team 中创建一个 scope :girl_team,这样它将 return 所有至少有 1 名 "girl" 球员的球队作为性别。

我不知道该怎么做。 我试过:

scope :girl_team, ->{Where('player.gender' => "girl")}  

好像不行。

那将需要 JOIN。但是,MongoDB/Mongoid 中没有 JOIN(与 SQL/ActiveRecord 不同)。但是,如果您 embed Player in Team(即 unique/special 到 MongoDB/Mongoid),那么 scope 将是:

scope :girl_team, ->{where('players.gender' => "girl")}

另一个解决方案是使用两个查询来获得你想要的:

team_ids = Player.where(gender: "girl").distinct(:team_id)
teams = Team.any_in(id: team_ids)