2011-01-03 3 views
1

사용자 컬렉션이 있습니다. 각 사용자에게는 지원 요청의 배열이 있습니다.MongoDB/Ruby (Mongoid) : 임베디드 문서 만 선택하는 방법

class User < MyModel 
    include Mongoid::Document 
    embeds_many :tickets 
    ... 
end 

class Ticket < MyModel 
    include Mongoid::Document 
    embedded_in :user, :inverse_of => :tickets 
    ... 
end 

관리자 섹션에서 모든 지원 요청을 선택하는 쿼리를 만듭니다. 그러나 티켓 컬렉션이 포함되어 있으므로 직접 쿼리 할 수는 없습니다. 이것이 내가 가진 것입니다 :

@users_with_pending_tickets = User.only(:tickets).where("tickets.status" => "Pending") 

<% for user in @users_with_pending_tickets %> 

    <% ticket = user.tickets.where(:status => "Pending").first %> 

    <%= ticket... %> 

<% end %> 

이것은 분명히보기 흉하게 보입니다. 다른 방법이 있습니까?

답변

2

모든 티켓을 검색해야하는 경우 포함 된 관계 대신 references_many 관계에 있어야합니다.

MongoDB는 결국이 공통적 인 문제를 해결하기 위해 '가상 컬렉션'을 지원해야하지만, 지금은이 제한을 해결해야합니다.

자세한 내용은 my answer to this similar question을 참조하십시오.

+0

답변 주셔서 감사합니다. 희망을 그들은 이것을 구현합니다. – Alex

+1

@Alex. 투표 해줘서 고마워. 가상 컬렉션도 실제로 사용할 수 있습니다. – bowsersenior

관련 문제