2010-12-06 92 views
3

我有一個名爲廣告模式,看起來像這樣:Mongoid - 查詢通過引用文檔

class Ad 
    include Mongoid::Document 
    referenced_in :category 
end 

和類別型號:

class Category 
    include Mongoid::Document 
    referenced_in :domain 
    references_many :ads 
end 

如何選擇廣告的域名? 我試圖使用Ad.where('category.domain_id' => domain.id)但這不起作用。

回答

6

問題是,MongoDB沒有任何方法將Category記錄映射到Ad記錄。所有它知道的是Ad記錄有一個category_id字段,所以'category.domain_id'將永遠不會返回任何內容。查詢內部的點符號僅適用於嵌入式文檔,而不適用於引用(它們仍然是MongoDB中的二等公民)。

所以要解決你的問題,你需要2個疑問:

category_ids = Category.where(:domain_id => domain.id).map(&:_id) 
Ad.where(:category_id.in => category_ids) 
+0

是的,但我也需要得到類別的所有子類別(包括子子和子子子...) 。我使用MapReduce實現了它(在我嘗試使用具有遞歸功能的ids集合之後)。 – 2010-12-07 13:44:10