sql >> Databáze >  >> NoSQL >> MongoDB

Jak na to:Uživatel má fanoušky

Co takhle sebereferenční sdružení:

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

Problém je v tom, že se pokoušíte provést relační asociaci pouze pomocí vložených dokumentů. Když máte Fan vložené do User , máte přístup pouze k Fan prostřednictvím nadřazeného User . Nemůžete udělat něco jako Fan.find(some_id) protože neexistuje žádná sbírka Fan evidence.

MongoDB nakonec bude podporovat virtuální sbírky, které vám to umožní. Prozatím musíte používat přidružení relačního typu. Pokud chcete v tomto případě použít vložené dokumenty, musíte vytvořit nějaké ošklivé a neefektivní vlastní metody pro vyhledávání v nadřazených záznamech.

S MongoDB a Mongoid jsem zjistil, že můžete snadno přepínat mezi vloženými a relačními asociacemi. Vztahy typu SQL a vložené vztahy mají své místo a lze je použít společně s velkým efektem.




  1. Pravidlo MongoDB pro odstranění řádku, pokud určitý sloupec obsahuje konkrétní hodnotu

  2. Unicode v pythonu

  3. Hadoop HDFS MapReduce výstup do MongoDb

  4. Mongodump získává prázdné složky