我是 MongoDB 新手。我有一个 Master Collection user_group。示例文档如下所示。
{group_name:"xyz","previlege":["Add","Delete"],...}
第二个集合 user_detail
{"user_name":"pt123","group_name":"xyz",...}
如何维护这两个集合之间的关系。我应该使用从 user_group 到 user_detail 的引用还是其他任何替代方法?
我是 MongoDB 新手。我有一个 Master Collection user_group。示例文档如下所示。
{group_name:"xyz","previlege":["Add","Delete"],...}
第二个集合 user_detail
{"user_name":"pt123","group_name":"xyz",...}
如何维护这两个集合之间的关系。我应该使用从 user_group 到 user_detail 的引用还是其他任何替代方法?
通常,在 MongoDB 中,“有很多”关系在关系数据库中的另一侧进行管理。一个 MongoDB 文档通常会有一个 ObjectId 或组名的数组(或者你用来识别外部文档的任何东西)。这与另一方通常具有“属于”列的关系数据库相反。
一定要清楚,这不是必需的。在您的示例中,如果这是您要进行的最常见查询,您可以在您的组文档中存储一组用户详细信息 ID。基本上,您应该问的问题是“我可能需要什么查询?” 并设计您的文档来支持它。
简单的回答:你没有。
当您开始研究 MongoDB 时,整个设计理念都会发生变化。如果我是你,我会维护previlege
user_detail 文档本身中的字段。
{"user_name":"abc","group_name":"xyz","previlege" : ["add","delete"]}
但是,如果您不断更改组权限,这可能并不理想。但这个想法是,您以某种方式设计数据存储,以便一个“记录”的所有信息都可以存储在一个对象中。
MongoDB 作为 NoSQL 没有显式连接。解决方法是可能的,但不推荐(阅读 MapReduce)。
您最好的选择是从客户端的 mongo 集合中检索文档并应用用户特定的权限。确保您在 user_group 集合中的 group_name 上有索引。
或者在客户端应用连接后,最好将用户的权限 [read、del 等] 存储在同一个文档中。但是,您不能从外部更新集合,因为这可能会破坏不变量。每次对用户组进行更新时,您都需要自己在客户端应用这些权限(特权)并将这些特权保存在同一个文档中。写入可能会受到影响,但读取会很快(假设一些字段被索引,例如用户名)。