Vad sägs om en självrefererande förening:
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 är att du försöker göra relationell association med endast inbäddade dokument. När du har en Fan
inbäddad i en User
, kan du bara komma åt Fan
genom dess överordnade User
. Du kan inte göra något som Fan.find(some_id)
eftersom det inte finns någon samling av Fan
uppgifter.
Så småningom kommer MongoDB att stödja virtuella samlingar som låter dig göra detta. För tillfället måste du använda relationsliknande associationer. Om du vill använda inbäddade dokument i det här fallet måste du skapa några fula och ineffektiva anpassade metoder för att söka igenom överordnade poster.
Med MongoDB och Mongoid har jag upptäckt att du enkelt kan växla mellan inbäddade och relationella associationer. Relationer av SQL-typ och inbäddade relationer har båda sin plats och kan användas tillsammans med stor effekt.