好的,让我试着解释一下我想要实现的目标......
假设我有一个嵌入ROOMS的集合HOUSE。每个房子都有很多房间。 假设每个房间都有颜色属性(蓝色,红色,绿色等)
现在,如果我想要检索所有房间颜色为蓝色的房屋,我可以继续进行,例如
House.where(:'rooms.color' => :blue)
然而,我真正想要的是查询所有只有蓝色房间的房子。并且我不知道该怎么做...我可以在HOUSE级别创建一个新属性来“标记”如果房间都是相同的颜色......但我宁愿避免,如果我可以,因为我的需要升级当前数据集以反映这一点。
谢谢,
亚历
答案 0 :(得分:0)
你试过吗?
House.only(:'rooms.color' => :blue)
答案 1 :(得分:0)
退后一步思考......我实际上是以错误的方式去做,有时你必须否定:)
基本上有一个只有蓝色房间的房子,意味着这个房子没有其他颜色的房间......
想象我有一组有限的可能颜色,如:红色:绿色:蓝色然后为了找到只有蓝色房间的房子,我只需找到没有房子:红色或绿色的房间:)
House.where(:'rooms.color'.nin => [:red, :green])
应该做的伎俩:)
亚历
答案 2 :(得分:0)
@Alex你更好地判断你的数据集,但理论上也应该这样做。
house_ids = House.where("rooms.color" => :blue).only(:_id).map(&:_id)
unwanted_house_ids = House.where("rooms.color".to_sym.ne => :blue).only(:_id).map(&:_id)
houses_with_only_blue_rooms = House.all.for_ids(house_ids - unwanted_house_ids)