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)
我有以下 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)