2012-05-15 2 views
0

나는 mongodb/mongoid와 함께 레일즈 애플리케이션에 루비를 구현하고 있으며 색인 생성/검색 구조에 대해 혼란 스럽다. 모델에 staff 필드가 있으며 직원은 생산 유형, 브로커, 사무실 유형 중 하나 일 수 있습니다. 각 직원은 Person입니다. 각 유형에는 여러 명의 직원이있을 수 있습니다.몽고이드/몽고드 색인 생성

따라서 두 가지 접근 방식이 있습니다.

1). 이 같은 staff as an array을 확인하고 저장

[{:key => 'broker', :name => "Broker Name", :person_id => "654978"},
{:key => 'office', :name => "Office Staff 1", :person_id => "564654"},
{:key => 'office', :name => 'another office', :person_id => '79878'}]

2). 확인은 Hash 내가 색인이 문서를 원하는 곳에 사무실 = '465456'과 같은 문서를 검색 할 수 있어야한다 {:brokers => [{:person_id => 2134, :name => 'Broker 1'}],
:office =>> [{:person_id => 2131, :name => 'Office 1'}, {:person_id => 1231, :name => 'Office 2'}]}


로 가게입니다.

+0

몰라 왜 단순히 ... :( – Pravin

+0

는 "사무실 무슨 무슨 잘못에 대해 코멘트하지 않고 투표를 아래로 사람들 = 465456 "? person_id입니까? 당신의 의도가 정확히 무엇인지 말하기는 어렵습니다. 이것이 투표율 하락에 기여할 수 있다고 생각합니다. –

+0

최근에 (코멘트가없는) downvoting의 실제 난항이 있었던 것 같습니다. Mongoid 태그가있는 합리적인 질문. – theTRON

답변

3

해시로 저장하는 경우 여러 개의 인덱스가 필요합니다. 이후 해시의 각 키에 대해 사무실 이름을 색인해야하기 때문에. 당신이 배열로 그것을 저장하는 경우에 당신은 단지 1 개의 색인 만 필요로한다.

2

실제로 당신이 복수 인덱스를 저장하려고합니다. @bjartek 잘, 당신은 배열로 다음을 저장할 수 있습니다 :

class Office 
    include Mongoid::Document 
    embeds_many :people, as: :staff 

    # unsure for polymorphic embeds; perhaps this needs 'staff.name' 
    index "people.name" 
    index "people.person_id" 
    index "people.key" 
end 

http://mongoid.org/docs/indexing.html