如何在MongoDB中组织多对多的关系

我有两个表/集合; 用户和组。 用户可以是任何数量的组的成员,并且用户也可以是任何数量的组的拥有者。 在关系型数据库中,我可能会有第三个名为UserGroups的表,其中包含一个UserID列,一个GroupID列和一个IsOwner列。

我正在使用MongoDB,我相信在文档数据库中有这种关系的不同方法。 我是否应该将用户表中的组和组作为所有者列表作为两个ObjectID数组embedded? 我是否也应该将成员和所有者列表作为两个数组存储在组表中,从而有效地映射引起关系信息重复的关系?

或者是一个桥梁UserGroups表格合法的概念在文件数据库中的多对多的关系?

谢谢

我所看到的,以及我目前使用的是每个文档中带有节点ID的embedded式数组。

所以文档user1具有属性组:[id1,id2]

而文档组1具有属性用户:[user1]。 文档组2也具有属性用户:[user1]。

这样你就可以得到一个Group对象,并轻松地select所有相关的用户,并且对于User来说也是一样的。

创build和更新对象时需要更多的工作。 当你说2个对象是相关的,你必须更新这两个对象。

在MongoDB中还有一个概念DBReferences,根据你的驱动程序,当检索一个文档时它会自动地拉引用的对象。

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

让我们通过一个例子来理解多对多关系

  • 书给作者
  • 学生给老师

作者的书是less数几个关系,所以我们可以在另一个文档中有一组书或作者。 学生对教师也一样。 我们也可能陷入重复的风险。 然而,这将要求每个学生在插入之前在系统中有一名教师,反之亦然。 应用程序逻辑可能永远不会允许它。 换句话说,父对象必须存在才能使子对象存在。

但是,当你有多对多的关系,使用两个集合,并有一个真正的链接。