Search code examples
mongodbmany-to-manyrelational-databasedocument-database

How to organise a many to many relationship in MongoDB


I have two tables/collections; Users and Groups. A user can be a member of any number of groups and a user can also be an owner of any number of groups. In a relational database I'd probably have a third table called UserGroups with a UserID column, a GroupID column and an IsOwner column.

I'm using MongoDB and I'm sure there is a different approach for this kind of relationship in a document database. Should I embed the list of groups and groups-as-owner inside the Users table as two arrays of ObjectIDs? Should I also store the list of members and owners in the Groups table as two arrays, effectively mirroring the relationship causing a duplication of relationship information?

Or is a bridging UserGroups table a legitimate concept in document databases for many to many relationships?

Thanks


Solution

  • What I've seen done, and what I currently use are embedded arrays with node id's in each document.

    So document user1 has property groups: [id1,id2]

    And document group1 has property users: [user1]. Document group2 also has property users: [user1].

    This way you get a Group object and easily select all related users, and the same for the User.

    This takes a bit more work when creating and updating the object. When you say 2 objects are related, you have to update both objects.

    There's also a concept DBReferences in MongoDB and depending on your driver, it'll pull referenced objects automatically when retrieving a document.

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