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