Hvad med en selvrefererende forening:
class User
include Mongoid::Document
references_many :fans,
:class_name => 'User',
:stored_as => :array,
:inverse_of => :fan_of
references_many :fan_of,
:class_name => 'User',
:stored_as => :array,
:inverse_of => :fans
end
# let's say we have users: al, ed, sports_star, movie_star
sports_star.fans << al
movie_star.fans << al
sports_star.fans << ed
movie_star.fans << ed
movie_star.fans # => al, ed
al.fan_of # => sports_star, movie_star
Problemet er, at du forsøger at lave relationel tilknytning ved kun at bruge indlejrede dokumenter. Når du har en Fan
indlejret i en User
, kan du kun få adgang til Fan
gennem sin overordnede User
. Du kan ikke gøre noget som Fan.find(some_id)
fordi der ikke er nogen samling af Fan
optegnelser.
Til sidst vil MongoDB understøtte virtuelle samlinger, der giver dig mulighed for at gøre dette. Indtil videre er du nødt til at bruge relations-type associationer. Hvis du vil bruge indlejrede dokumenter i dette tilfælde, skal du oprette nogle grimme og ineffektive brugerdefinerede metoder til at søge gennem overordnede poster.
Med MongoDB og Mongoid har jeg fundet ud af, at du nemt kan skifte mellem indlejrede og relationelle associationer. SQL-type relationer og indlejrede relationer har begge deres plads og kan bruges sammen med stor effekt.