включва един атрибут от друга колекция в 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
Вярно е, но... когато се реферират обекти, единият носи идентификатора на другия. Така че потребителят може да направи map/reduce, за да получи user_ids от Scores, след което да направи заявка на User. - person apneadiving; 14.06.2012
comment
Нямате нужда от map-reduce за това. И все още има няколко запитвания. - person Sergio Tulentsev; 14.06.2012
comment
Ypu не се нуждае от него, но е най-бързият. Това са две заявки, но работи и е допълнителна информация към вашия отговор. Само коментар. - 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