Bagaimana dengan asosiasi referensi diri:
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
Masalahnya adalah Anda mencoba melakukan asosiasi relasional hanya menggunakan dokumen yang disematkan. Ketika Anda memiliki Fan
tertanam di dalam User
, Anda hanya dapat mengakses Fan
melalui User
induknya . Anda tidak dapat melakukan sesuatu seperti Fan.find(some_id)
karena tidak ada koleksi Fan
catatan.
Akhirnya, MongoDB akan mendukung koleksi virtual yang memungkinkan Anda melakukan ini. Untuk saat ini, Anda harus menggunakan asosiasi tipe relasional. Jika Anda ingin menggunakan dokumen yang disematkan dalam kasus ini, Anda harus membuat beberapa metode kustom yang jelek dan tidak efisien untuk mencari melalui catatan induk.
Dengan MongoDB dan Mongoid, saya telah menemukan bahwa Anda dapat beralih antara asosiasi tertanam dan relasional dengan mudah. Hubungan tipe SQL dan hubungan yang disematkan keduanya memiliki tempatnya masing-masing dan dapat digunakan bersama untuk menghasilkan efek yang luar biasa.