Làm thế nào về một liên kết tự tham chiếu:
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
Vấn đề là bạn đang cố gắng thực hiện liên kết quan hệ chỉ sử dụng các tài liệu nhúng. Khi bạn có Fan
được nhúng bên trong User
, bạn chỉ có thể truy cập Fan
thông qua User
chính của nó . Bạn không thể làm điều gì đó như Fan.find(some_id)
vì không có bộ sưu tập Fan
Hồ sơ.
Cuối cùng, MongoDB sẽ hỗ trợ các bộ sưu tập ảo cho phép bạn thực hiện việc này. Hiện tại, bạn phải sử dụng kết hợp kiểu quan hệ. Nếu bạn muốn sử dụng tài liệu nhúng trong trường hợp này, bạn phải tạo một số phương pháp tùy chỉnh xấu và không hiệu quả để tìm kiếm thông qua các bản ghi gốc.
Với MongoDB và Mongoid, tôi thấy rằng bạn có thể chuyển đổi giữa các liên kết được nhúng và quan hệ một cách dễ dàng. Mối quan hệ kiểu SQL và mối quan hệ nhúng đều có vị trí của chúng và có thể được sử dụng cùng nhau để tạo ra hiệu quả tuyệt vời.