Ruby on rails 按引用文档字段进行Mongoid搜索

Ruby on rails 按引用文档字段进行Mongoid搜索,ruby-on-rails,ruby-on-rails-3,mongoid,Ruby On Rails,Ruby On Rails 3,Mongoid,我在使用Mongoid的Rails 3应用程序的搜索查询中遇到问题。我的模型是: class Offer has_many :waypoints end class Waypoint belongs_to :offer field: address field: order, type: Integer end 因此,每个报价都有几个航路点,这些航路点具有顺序。最小顺序的航路点是起点,最大顺序的航路点是终点 任务:我们有“收件人”和“发件人”地址。我们需要找到所有的报价,哪些

我在使用Mongoid的Rails 3应用程序的搜索查询中遇到问题。我的模型是:

class Offer
  has_many :waypoints
end

class Waypoint
  belongs_to :offer
  field: address
  field: order, type: Integer
end
因此,每个报价都有几个航路点,这些航路点具有顺序。最小顺序的航路点是起点,最大顺序的航路点是终点

任务:我们有“收件人”和“发件人”地址。我们需要找到所有的报价,哪些航路点以正确的顺序包含这些地址

问题:我找不到有用的查询。在mongoid文档中,我发现smth类似于

Offer.where(“waypoints.address”=>“Berlin”),但仅当嵌入了waypoints时才有效

对于这样的问题,你知道哪些解决方案

附言。 因此,我可能会创建另一个表WaypointsCache,其字段类似于(对于每个报价,将有几个具有不同“从到”组合的缓存):


如果目标是找到柏林航路点地址的所有报价,那么您有两个选择

  • 移动要嵌入报价中的航路点
  • 执行两个查询,如下所示:
  • 代码:

    waypoints = Waypoint.where(:address => "Berlin").only(:offer_id).all
    offer_ids = waypoints.map(&:offer_id)
    offers = Offer.any_in(:_id => offer_ids).all
    

    如果目标是找到柏林航路点地址的所有报价,那么您有两个选择

  • 移动要嵌入报价中的航路点
  • 执行两个查询,如下所示:
  • 代码:

    waypoints = Waypoint.where(:address => "Berlin").only(:offer_id).all
    offer_ids = waypoints.map(&:offer_id)
    offers = Offer.any_in(:_id => offer_ids).all
    

    一个令人烦恼的普通问题的极好解决方案。一个令人烦恼的普通问题的极好解决方案。