MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

How-to:Użytkownik ma fanów

Co powiesz na stowarzyszenie autoreferencyjne:

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

Problem polega na tym, że próbujesz wykonać powiązanie relacyjne, używając tylko osadzonych dokumentów. Kiedy masz Fan osadzone wewnątrz User , możesz uzyskać dostęp tylko do Fan przez jego rodzica User . Nie możesz zrobić czegoś takiego jak Fan.find(some_id) ponieważ nie ma kolekcji Fan dokumentacja.

Docelowo MongoDB będzie obsługiwać wirtualne kolekcje, które pozwolą Ci to zrobić. Na razie musisz używać skojarzeń typu relacyjnego. Jeśli chcesz w tym przypadku użyć osadzonych dokumentów, musisz stworzyć brzydkie i nieefektywne niestandardowe metody przeszukiwania rekordów nadrzędnych.

Dzięki MongoDB i Mongoid odkryłem, że można łatwo przełączać się między skojarzeniami osadzonymi i relacyjnymi. Relacje typu SQL i relacje osadzone mają swoje miejsce i mogą być używane razem z doskonałym skutkiem.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb-error sprawdzanie poprawności ustawień:dozwolony jest tylko jeden argument pozycyjny

  2. Jak używać guid w zapytaniu powłoki mongodb?

  3. Łączenie się z bazą danych Mongo przez tunel SSH w Javie

  4. MongoDB $ifNull

  5. Czy możesz określić klucz dla $addToSet w Mongo?