sql >> Database teknologi >  >> NoSQL >> MongoDB

Sådan gør du:Brugeren har fans

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.




  1. Sådan får du antallet af forekomster af et søgeord i en streng ved hjælp af mongoDb

  2. bruge .where() Forespørgsel med .update() via mongoose?

  3. Selvsigneret SSL-forbindelse ved hjælp af PyMongo

  4. MongoDB $last Aggregation Pipeline Operator