我有两个表/集合;用户和组。用户可以是任意数量的组的成员,并且用户也可以是任意数量的组的所有者。在关系数据库中,我可能会有第三个名为 UserGroups 的表,其中包含一个 UserID 列、一个 GroupID 列和一个 IsOwner 列。
我正在使用 MongoDB,我确信在文档数据库中对这种关系有不同的方法。我应该将组列表和作为所有者的组列表作为两个 ObjectID 数组嵌入到 Users 表中吗?我是否还应该将 Groups 表中的成员和所有者列表存储为两个数组,从而有效地反射(reflect)导致关系信息重复的关系?
或者桥接用户组表是文档数据库中用于多对多关系的合法概念?
谢谢
最佳答案
我所看到的以及我目前使用的是每个文档中带有节点 ID 的嵌入式数组。
所以文档 user1 有属性组:[id1,id2]
并且文档 group1 具有属性 users:[user1]。文档 group2 也有属性 users:[user1]。
通过这种方式,您可以获得一个 Group 对象并轻松选择所有相关用户,对于 User 也是如此。
在创建和更新对象时,这需要更多的工作。当您说 2 个对象相关时,您必须更新这两个对象。
MongoDB 中还有一个概念 DBReferences,根据您的驱动程序,它会在检索文档时自动提取引用的对象。
http://www.mongodb.org/display/DOCS/Database+References#DatabaseReferences-DBRef
https://stackoverflow.com/questions/4839881/