2012-05-15 3 views
0

Я реализую приложение ruby ​​on rails с mongodb/mongoid, и я немного запутался в лучшей структуре индексирования/поиска. У меня есть поле staff в модели и персонал может быть любого типа - производство, брокер, офис. Каждый персонал - Person. У каждого типа может быть несколько сотрудников.Индексирование Mongoid/mongodb

У меня есть два подхода:

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 и магазин как
{:brokers => [{:person_id => 2134, :name => 'Broker 1'}],
:office =>> [{:person_id => 2131, :name => 'Office 1'}, {:person_id => 1231, :name => 'Office 2'}]}

Я хочу, чтобы индексировать эти документы и должны быть в состоянии найти документы, такие как, где офис = «465456».

+0

Не знаю, почему люди просто вниз голосования без комментариев о Что не так ... :( – Pravin

+0

что «офис = 465456 "? Это личный_ид? Трудно точно сказать, каково ваше намерение, я предполагаю, что это может повлиять на понижение голосов. –

+0

В последнее время, похоже, было реальное волнение downvoting (без комментариев) отлично разумные вопросы, имеющие монгодский тег. – 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

Смежные вопросы