Вы можете создавать (полиморфные) ассоциации «многие ко многим», используя реляционные ассоциации, и сохранять отношение в виде массива.
class Person
include Mongoid::Document
field :name
references_many :preferences, :stored_as => :array, :inverse_of => :people
end
class Preference
include Mongoid::Document
field :name
references_many :people, :stored_as => :array, :inverse_of => :preferences
end
ps1 = Person.create(:name => 'John Doe')
pf1 = Preference.create(:name => 'Preference A')
pf2 = Preference.create(:name => 'Preference B')
ps1.preferences << pf1
ps1.preferences << pf2
ps1.save
pf1.people.each {|ps| puts ps.name }
ps1.preferences.each {|pf| puts pf.name }
Подробнее о реляционных ассоциациях можно найти в документации Mongoid: http://mongoid.org/docs/associations/
Примечание. Ссылки, хранящиеся в виде массивов, могут медленно работать при массовом создании / обновлении объектов со многими связями. Более традиционная СУБД легко превзойдет Mongo, поскольку она добавит новую строку для каждого отношения, где mongo необходимо получить и обновить массив object_ids для самого объекта и для каждого отношения.