Mongoid: Как загрузить только некоторые поля объекта, который вы лениво загружаете через ссылку?

Из соображений производительности я использую как можно чащеonly() ключевое слово при написании mongoid запроса, чтобы указать поля, которые я хочу загрузить.

Обычным подозрением является, например, когда я хочу, чтобы электронная почта пользователя всех моих администраторов была только для целей отображения.

Я бы написал:

<code>User.where(:groups => :admins).only(:email).each do |u|
 puts u.email
end
</code>

Я делаю это, потому что моя пользовательская модель довольно полна большого количества данных, которые я с радостью могу игнорировать, перечисляя кучу писем.

Однако теперь давайте представим, что на моих пользователей ссылаются через модель Project, так что для каждого проекта я могу сделать:project.user, Благодаря ленивой загрузке mongoid мой объектный пользователь будет создан (и будет запрошен из БД) только тогда, когда я вызову ссылку.

Но что, если я хочу перечислить всю электронную почту владельца всего админ проекта, например?

Я бы написал это:

<code>Project.where(:admin_type => true).each do |p|
  puts p.user.email
end
</code>

Основная проблема здесь заключается в том, что, делая это, я загружаю весь пользовательский объект для каждого проекта, и если есть много проектов, соответствующих запросу, которые могут стать довольно тяжелыми. Так как мне загрузить только электронные письма?

Я мог бы сделать это:

<code>User.where(:_id => p.user_id).only(:email).first.email
</code>

Но это очевидно побеждает цель хорошего синтаксиса простого выполнения:

<code>p.user.email 
</code>

Я хотел бы написать что-то вроде:p.user.only(:email).email, но я не могу. Есть идеи ?

Alex

Ответы на вопрос(2)

Ваш ответ на вопрос