2011-07-11 62 views
1

我在使用Mongoid的Rails 3應用程序中遇到搜索查詢問題。我的模特是:通過引用文檔字段進行的Mongoid搜索

class Offer 
    has_many :waypoints 
end 

class Waypoint 
    belongs_to :offer 
    field: address 
    field: order, type: Integer 
end 

因此,每個優惠有幾個航點,這些航點有秩序。訂單最小的航點是起點,最大的目的地點。

任務:我們有「收件人」和「發件人」地址。我們需要找到所有的優惠,哪些航點以適當的順序包含這些地址。

問題:我找不到有用的查詢。在mongoid文檔中,我找到了類似

Offer.where(「waypoints.address」=>「Berlin」),但只有在嵌入了Waypoints時纔有效。

對於這樣的問題,你知道哪些解決方案?

P.S. 所以我可能會創建一個領域的又一表WaypointsCache像(每個報價會有好幾個緩存與不同對連擊):

class WaypointCache 
    field: from 
    field: to 
    field: offer_id 
end 

回答

4

如果目標是找到與柏林的航點地址的所有優惠,那麼你有幾個選擇。

  1. 將路標移到要約內嵌入。
  2. 執行兩個查詢,像這樣:

代碼:

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

與 「唯一」 的方法很好的解決方案! – makaroni4

+0

令人討厭的常見問題的解決方案。 – xiy

相關問題