Mongoid嵌入/ has_many:通过等价物

She*_*hea 4 ruby-on-rails mongodb mongoid ruby-on-rails-3

在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
Run Code Online (Sandbox Code Playgroud)

那么能够做到 Advertiser.first.advertisementsAdvertisement.first.advertiser

Advertiser.campaigns.collect{|campaign| campaign.advertisement} 不是一种选择

怎么样,我怎么用references_many/ referenced_in

mor*_*itz 8

简短的回答是,你做不到.MongoDB没有连接表的概念,也没有一般的连接.Mongoid多对多"模拟"是通过在每一侧存储外键数组来完成的.

回应评论:MongoDB是一个文档存储.因此,它适用于"文档"高度异构的情况.当您为广告商存储Campains和广告子树时,您必须以ruby代码收集广告商的广告.如果您的数据具有非常同质的形式,那么您可以考虑使用关系数据库.我们经常使用MySQL来关联对象,然后将MongoDB文档添加到对象中,以便它们可以扩展.

  • MongoDB是一个文档存储.因此,它适用于"文档"高度异构的情况.当您为广告商存储Campains和广告子树时,您必须以ruby代码收集广告商的广告.如果您的数据具有非常同质的形式,那么您可以考虑使用关系数据库.我们经常使用MySQL来关联对象,然后将MongoDB文档添加到对象中,以便它们可以扩展. (4认同)