Как организовать отношения многие ко многим в MongoDB - PullRequest
56 голосов
/ 30 января 2011

У меня есть две таблицы / коллекции;Пользователи и группы.Пользователь может быть членом любого количества групп, а пользователь также может быть владельцем любого количества групп.В реляционной базе данных у меня, вероятно, была бы третья таблица под названием UserGroups со столбцом UserID, столбцом GroupID и столбцом IsOwner.

Я использую MongoDB и уверен, что для этого есть другой подходвид отношений в базе данных документов.Должен ли я встраивать список групп и групп-как-владельцев в таблицу Users как два массива ObjectID?Должен ли я также хранить список членов и владельцев в таблице «Группы» в виде двух массивов, эффективно отражая взаимосвязь, вызывающую дублирование информации об отношениях?много отношений?

Спасибо

Ответы [ 3 ]

35 голосов
/ 30 января 2011

То, что я видел, сделано, и что я в настоящее время использую, это встроенные массивы с идентификаторами узлов в каждом документе.

Таким образом, документ user1 имеет группы свойств: [id1, id2]

Документ group1 имеет свойство users: [user1].Документ group2 также имеет свойство users: [user1].

Таким образом, вы получаете объект Group и легко выбираете всех связанных пользователей, и то же самое для User.

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

В MongoDB также есть концепция DBReferences, и в зависимости от вашего драйвера он будет извлекать ссылочные объекты автоматически при извлечении документа.

http://www.mongodb.org/display/DOCS/Database+References#DatabaseReferences-DBRef

5 голосов
/ 04 декабря 2017

В случае, если кому-то интересно, я натолкнулся на очень хорошую статью, опубликованную в блоге mongoDB. 6 Полезные правила для разработки схемы MongoDB . Эта статья состоит из трех частей, после прочтения всех трех у вас будет хорошее понимание.

2 голосов
/ 29 августа 2016

Давайте разберемся со многими ко многим Отношения с примерами

  • книги для авторов
  • студенты для учителей

Книги для авторов * 1009отношение * от нескольких к немногим , поэтому мы можем иметь массив книг или авторов внутри чужого документа.То же самое касается учеников и учителей.Мы также могли бы столкнуться с риском дублирования.Однако для этого необходимо, чтобы у каждого учащегося был учитель в системе до введения и наоборот.Логика приложения всегда может не допустить этого.Другими словами, родительский объект должен существовать, чтобы существовал дочерний объект.

Но когда у вас есть отношение многие ко многим , используйте две коллекции и получите истинную связь.

...