включить один атрибут другой коллекции в mongoid rails Query

Я хочу сделать запрос с mongoid, у меня есть следующие модели

class Score
   include Mongoid::Document
   field :value, :type => Integer
   belongs_to :user
end


class User
   include Mongoid::Document
   field :name, :type => String
   field :age, :type => Integer
   has_many :scores

Я хочу запросить все оценки из коллекции с их пользователями. но объект пользователей должен иметь только поле «имя»

я был бы кем-то вроде

   Score.find.all.includes(:user).only(:name)

Пожалуйста, скажите правильный синтаксис для этого


person Umair Ejaz    schedule 13.06.2012    source источник


Ответы (1)


Score ссылается на User, поэтому невозможно получить их обоих в одном запросе, поскольку в MongoDB нет объединений.

Либо денормализация и включение имени пользователя в Score, либо выполнение нескольких запросов.

person Sergio Tulentsev    schedule 13.06.2012
comment
Map/Reduce не может работать между коллекциями. Он ограничен одним. - person Sergio Tulentsev; 14.06.2012
comment
Верно, но... когда на объекты ссылаются, один из них имеет идентификатор другого. Таким образом, пользователь может сделать карту/уменьшить, чтобы получить user_id из Scores, а затем запросить пользователя. - person apneadiving; 14.06.2012
comment
Для этого вам не нужно map-reduce. И это еще несколько запросов. - person Sergio Tulentsev; 14.06.2012
comment
Вам это не нужно, но это самое быстрое. Это два запроса, но они работают и являются дополнительной информацией к вашему ответу. Просто комментарий. - person apneadiving; 14.06.2012
comment
map-reduce самый быстрый? Мы про одну и ту же БД говорим? :) - person Sergio Tulentsev; 14.06.2012
comment
Ну, если быть более точным, он не самый быстрый сам по себе, но он не блокирует другие подключения для чтения в коллекции, поэтому в целом он самый быстрый. - person apneadiving; 14.06.2012
comment
Чтения не блокируются в mongodb. Пишет есть. Map-Reduce не только читает, но и записывает. В дополнение к блокировкам записи, он также имеет блокировки JS. Так что, если вы запустите несколько MR, вы будете весьма удивлены :) - person Sergio Tulentsev; 14.06.2012
comment
Очень интересное обсуждение, заставляющее меня копаться в уменьшении производительности карты, +1 - person apneadiving; 14.06.2012