Mongoid встраивает / has_many: через эквивалент - PullRequest
4 голосов
/ 15 июля 2011

В 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?

1 Ответ

8 голосов
/ 15 июля 2011

Краткий ответ: вы не можете. MongoDB не имеет понятия объединяющей таблицы и не объединяет вообще. Монгоидная «симуляция« многие ко многим »выполняется путем хранения массивов внешних ключей на каждой стороне.

В ответ на комментарий: MongoDB - это хранилище документов. Поэтому он подходит для ситуаций, когда «документы» сильно разнородны. Поскольку вы храните своих рекламодателей в поддереве кампаний и рекламных объявлений, вам придется собирать рекламные объявления для рекламодателей в виде кода рубина. Если ваши данные имеют очень однородную форму, вы можете использовать реляционную базу данных. Мы часто использовали MySQL для связывания объектов, а затем добавляли документы MongoDB к объектам, чтобы они были расширяемыми.

...