MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да:Потребителят има фенове

Какво ще кажете за самореферентна асоциация:

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

Проблемът е, че се опитвате да направите релационна асоциация, като използвате само вградени документи. Когато имате Fan вградени в User , имате достъп само до Fan чрез своя родител User . Не можете да направите нещо като Fan.find(some_id) защото няма колекция от Fan записи.

В крайна сметка MongoDB ще поддържа виртуални колекции, които ще ви позволят да направите това. Засега трябва да използвате асоциации от релационен тип. Ако искате да използвате вградени документи в този случай, трябва да създадете някои грозни и неефективни персонализирани методи за търсене в родителските записи.

С MongoDB и Mongoid открих, че можете лесно да превключвате между вградени и релационни асоциации. Връзките от типа SQL и вградените релации имат своето място и могат да се използват заедно с голям ефект.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да извлека и отпечатам обекти pymongo.cursor.Cursor?

  2. Pymongo cursor limit(1) връща повече от 1 резултат

  3. Генериране на топлинни карти с R, Php и Mongodb

  4. mongo find заявка за joda datetime

  5. Spring Data MongoDB транзакции