2013-09-16 98 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