2013-09-16 36 views
1

我有這個模型使用關係領域:Mongoid在查詢

class Document1 
    field privacy 
    has_many events, :as => :target 
end 

class Document2 
    field privacy 
    has many_events, :as => :target 
end 

class Event 
    belongs_to :target, :polymorphic => true 
end 

我需要做的是這樣的:

Event.where(:target.privacy => :public) 

我怎麼能這樣做呢?

回答

3

不能從MongoDB中的關係表中查詢的字段。 Mongodb沒有加入的概念。此外,點符號不會爲你工作,因爲你使用的是belongs_to而不是embedded_in。所以,你必須在這裏幾個選項,你要麼可以改變你的架構使用嵌入式的關係,也可以在3次單獨的查詢做到這一點,是這樣的:

ids = Document1.where(privacy: :public).pluck(:id) + Document2.where(privacy: :public).pluck(:id) 
Event.where(target_id: ids).to_a 

我的建議是檢查您的模式,以更好地利用嵌入式關係,但這取決於你的用例。

0

你可能想看看MongoDB中的dot notationembedded documents

+0

在Mongoid中不要爲我工作,總是返回0結果:Event.where('target.privacy'=>:public) – drinor