我有两张桌子/两套衣服;用户和组.用户可以是任意数量组的成员,也可以是任意数量组的所有者.在关系数据库中,我可能会有第三个名为UserGroups的表,其中有一个UserID列、一个GroupID列和一个IsOwner列.

我使用的是MongoDB,我相信对于文档数据库中的这种关系,有一种不同的方法.我应该将组和组作为所有者的列表作为两个objectid数组嵌入到Users表中吗?我是否应该将Groups表中的成员和所有者列表存储为两个数组,从而有效地镜像关系,从而导致关系信息的重复?

或者,对于多对多关系,桥接用户组表在文档数据库中是一个合法的概念吗?

谢谢

推荐答案

我所看到的,以及我目前使用的是嵌入数组,每个文档中都有 node id.

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

文档组1有属性用户:[user1].文档组2还有属性用户:[user1].

通过这种方式,您可以获得一个组对象,并轻松地 Select 所有相关的用户,用户也是如此.

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

MongoDB中还有一个概念DBReferences,根据驱动程序的不同,它会在检索文档时自动提取引用的对象.

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

Mongodb相关问答推荐

MongoDB $lookup 查找字段值数组

MongoDB 投影按数组中的字符串长度排序

MongoDB - 将对象转换为数组

Mongo 将一个数组链接到另一个数组

如何向所有文档添加一个字段,其中前 100 个文档的值为 1,接下来的 100 个文档的值为 2,依此类推?

从具有多个数组匹配 MongoDB 的两个集合中采样数据

什么 Javascript 库可以针对对象判断类似 MongoDB 的查询谓词?

.NET 4 中是否有 mongodb C# 驱动程序支持 System.Dynamic.DynamicObject?

在 Ubuntu 14.04 中安装 MongoDB 失败

MongoDB 3 Java判断集合是否存在

mongo - 如何查询嵌套的 json

如何确保基于特定字段的数组中的唯一项 - mongoDB?

在 Mongo 中,$near 和 $nearSphere 有什么区别?

指定在 mongodb .js 脚本中使用哪个数据库

如何使用 MongoDB C# 驱动程序有条件地组合过滤器?

如何使用服务器实例指定 mongodb 用户名和密码?

使用命令行从 MongoDB 数据库中的所有集合中删除所有索引

python + pymongo:如何从 for 循环中在 mongo 中的现有文档上插入新字段

是否可以在 Mongodb 中的两个数据库之间进行 $lookup 聚合?

如何使用 mongodb-java-driver 进行 upsert