2013-09-16 5 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의에서 dot notation를 살펴 할 수 있습니다. 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의에서 관계 테이블에서 필드를 쿼리 할 수 ​​없습니다 embedded documents

+0

몽고 이드에서 저에게 효과적이지 않습니다. 항상 0 개의 결과를 반환합니다 : Event.where ('target.privacy'=> : public) – drinor