MongoDB / Mongoid проблема моделирования многие ко многим - PullRequest
2 голосов
/ 17 мая 2011

Итак, у меня проблема с моделированием в Mongo / Mongoid:

Команды могут участвовать в соревнованиях, и каждое соревнование будет иметь результаты для каждой команды (счет, действия, ведущие счет, и т. Д.) По сути, я хочу показать своего рода табло для этого события.

Итак, вот что у меня есть:

Event
    has_and_belongs_to_many :teams

Team
    field :name
    field :color

    has_and_belongs_to_many :events

Это прекрасно работает, но мне нужно знать, как смоделировать отношения между каждой командой и событием.

TeamEventStats (probably not the best name)

    field :score, :type => Integer

    # etc. etc.

В ActiveRecord / RDBMS я мог бы сделать сквозную (объединенную) модель и продолжить свой веселый путь, но Я не знаю, как это сделать в Монго. Кто-нибудь знает хороший способ сделать это или лучший способ моделирования отношений?

Ответы [ 2 ]

2 голосов
/ 05 сентября 2011

это может вам помочь.http://mongoid.org/docs/relations/referenced/n-n.html

1 голос
/ 07 июня 2011

А имеет много сквозных, на самом деле это просто пара много-к-одному, чтобы создать множество ко многим, с дополнительным бонусом, который позволяет хранить данные отношений в дополнение к внешним ключам (например, статистику вашей команды). Так что вы можете легко сделать это в Mongoid, используя что-то вроде:

Event
  has many :team_stats

Team
  has many :team_stats

TeamStat 
  belongs_to :events
  belongs_to :team
  field :score, :type => Integer

Хотя в этом нет ничего иерархического. Если вам нужно уметь запрашивать оба (дать мне статистику для всей команды по событию A, а также статистику по всем событиям для команды № 1), то это прежде всего реляционная схема. Знаешь что я имею ввиду? Так что, если у вас в приложении нет много других иерархических данных / данных на основе документов, я бы, вероятно, выбрал СУБД.

Однако, если вам когда-либо нужно было запрашивать статистику по событию, вы можете сделать этот документ более дружественным, внедрив статистику команды в каждое событие, а не связывая События и Команду через другую коллекцию.

По той же логике, если вам когда-либо нужно было запрашивать статистику команды, вы можете встраивать статистику событий в каждую команду.

...