Как запросить конкретное поле коллекции MongoDB в консоли Rails?

У меня есть приложение Rails 3, использующее MongoDB, с Mongoid в качестве ORM. Я хотел бы запросить определенное поле в коллекции.

Для запроса всех записей определенной коллекции я использую User.all.to_a как эквивалент User.all в ActiveRecord.

Теперь я хотел бы запросить все записи в коллекции, но вывести только определенное поле. В этом случае я хотел бы видеть все имена пользователей. Как мне это сделать?

Я уверен, что смотрел прямо на это в документации Mongoid и просто что-то упустил...


person Joe    schedule 04.06.2012    source источник


Ответы (1)


Я не смог найти его в новой документации для mongoid, но вот быстрая ссылка на только указывает на старую документацию 2.xx.

В основном вам нужно сделать:

User.all.only(:name).to_a
person rubish    schedule 04.06.2012
comment
У меня не сработало... и User.all.only(:name).to_a, и User.only(:name).to_a выгружают массив всех пользовательских документов, включая все связанные поля. Если сделать что-то вроде User.all.distinct(:name), это даст мне вывод только соответствующего поля :name. Не знаю, почему ваше предложение не работает. Вроде должно... - person Joe; 05.06.2012
comment
Вот как это работает в Mongoid, вы не получите обратно только поле, значения, но каждый документ с заполненным только этим полем. Вы всегда можете отобразить массив, но это может быть неэффективно, в зависимости от вашего контекста. Что-то вроде: User.only(:name).all.to_a.map{|u| u.name}. - person theTRON; 05.06.2012
comment
@J.Venator, использующий only, из БД возвращаются только указанные поля в виде документа, и монгоид заключает их в экземпляр модели. Однако distinct возвращает только массив указанных значений. Может быть, я неправильно понял вопрос, и вам нужно distinct - person rubish; 05.06.2012