在Mongoid中,我如何实现ActiveRecord :through =>
提供的相同功能?
class Advertiser
include Mongoid::Document
embeds_many :campaigns
# how would I do this
embeds_many :advertisements, :through => :campaigns
end
class Campaign
embedded_in :advertiser
embeds_many :advertisements
end
class Advertisement
embedded_in :campaign
# or this?
embedded_in :advertiser, :through => :campaign
end
然后就可以了
Advertiser.first.advertisements
和
Advertisement.first.advertiser
Advertiser.campaigns.collect{|campaign| campaign.advertisement}
不是一个选项
如何使用references_many
/ referenced_in
?
答案 0 :(得分:8)
简短的回答是,你不能。 MongoDB没有连接表的概念,也没有一般的连接。 Mongoid多对多“模拟”是通过在每一侧存储外键数组来完成的。
回应评论: MongoDB是一个文档存储。因此,它适用于“文档”高度异构的情况。当您为广告商存储Campains和广告子树时,您必须以ruby代码收集广告商的广告。如果您的数据具有非常同质的形式,那么您可以考虑使用关系数据库。我们经常使用MySQL来关联对象,然后将MongoDB文档添加到对象中,以便它们可以扩展。