2015-01-15 5 views
0

에 의해 발견 나는 다음과 같은 임베디드 구조를 가지고는 Mongoid가 포함 된 문서

class CbAuthor 
    include Mongoid::Document 
    embeds_many: cb_bylines 

    field :name, type: String 
end 

class CbByline 
    include Mongoid::Document 

    embedded_in :cb_author 
    has_many :cb_articles 

    field :byline, type: String 
end 

class CbArticle 
    include Mongoid::Document 

    belongs_to :cb_byline 
end 

이 많은 회 선별 또는 가명 저자 아래에 게시하고 자신의 분석 보고서에 첨부됩니다되어이 있기 때문이다. 그래서 필자가 회선을 가지고있을 때 저자를 어떻게 찾습니까? 이것은 모든 대대적 인 회선 아래에 작성한 모든 기사를 나열해야하는 대시 보드를 갖기 때문에 필요합니다.

나는 CbAuthor.cb_bylines을 시도했지만 아무런 방법 오류가 발생하지 않습니다. 또는 CbAuthor.where(cb_bylines["byline"]: bylineInQuestion)하지만 오류가 있습니다.

는 본질적 목표는 최소한으로 (그 회 선별

답변

1

embeds_many :cb_bylines는 "cb_bylines라는 해시의 배열을 추가"말하는 단지 멋진 방법과 관련된 모든 자신의 회 선별하고 기사를 찾을 수있는 하나의 작성자 이름을 가지고있다 스토리지에 관한 한). 그것은 당신의 CbAuthor들 MongoDB를 내부에 같이 있다는 것을 의미 :

{ 
    _id: '...', 
    name: '...', 
    cb_bylines: [ 
    { _id: '...', byline: '...' }, 
    ... 
    ] 
} 
당신이 컬렉션 내부 해시를 조회하는 것처럼 당신은 단순히 'cb_bylines.byline'를 찾을 수

MongoDB를 당신을 위해 간단한 쿼리에 대한 배열을 풀다합니다

authors_by_lined_as_pancakes = CbAuthor.where('cb_bylines.byline' => 'Pancakes McGee') 

또는 당신이 알고있는 경우 하나있다 :

pancakes_mcgee = CbAuthor.find_by('cb_bylines.byline' => 'Pancakes McGee') 

당신이 무엇을보고 레일과 Mongoid를 우회하는 것을 두려워하지 마십시오 r 데이터는 실제로 MongoDB 내부처럼 보입니다.

관련 문제