mongodb - mongo db如何存储像图这样的多关系
问题描述
我必须存储一些用户及其组关系,如下所示
所以我打算创建一个如下所示的集合
UserGroupRelation 集合
{
"user":String,
"Group":String"
}
超级管理员用户的集合示例
{
"user":"Adminuser-1",
"Group":"Group1"
}
{
"user":"Adminuser-1",
"Group":"Group2"
}
{
"user":"Adminuser-1",
"Group":"Group3"
}
用户和组列被索引的地方,我将在下面的查询中运行
1.每当我想检查给定用户是否有权访问给定组时
db.UserGroupRelation.find( { user: "Adminuser-1", Group: "Group2" })
2.我也想在删除组时删除所有关联
db.UserGroupRelation.deleteMany({ Group: "Group2" })
3.同时找到一个组的所有用户
db.UserGroupRelation.find( { Group: "Group2" })
4.Find Hierarchy?,用我的方法我找不到
但是通过这种方法,我也在实时复制大量数据,我可能有 10000 个组和 100 万用户,所以会有性能问题。有了这个,我无法维护像SuperAdmin->SubAdmin->user of same group这样的层次结构
我检查了 mongo 树,但它不符合这个要求。有没有更好的方法来处理 mongodb 中的这个要求。?
解决方案
这是您的图形要求显示的结构。但它仍然会导致重复,因此您需要更改它。阅读一对多关系。
{
"superAdmin_ID": "001",
"groups": [
{
"_id": "0",
"groupNumber": "1",
"users": [
{
"_userKey": "1023"
"userName": "Fred"
},
{
"_userKey": "1024"
"userName": "Steve"
}
],
"subAdmin": {
"_adminKey": "55230"
"adminName": "Maverick"
},
},
{
"_id": "1",
"groupNumber": "2",
"users": [
{
"_userKey": "1023"
"userName": "Fred"
},
{
"_userKey": "4026"
"userName": "Ella"
}
],
"subAdmin": {
"_adminKey": "55230"
"adminName": "Maverick"
},
},
{
"_id": "2",
"groupNumber": "3",
"users": [
{
"_userKey": "7026"
"userName": "James"
}
],
"subAdmin": {
"_adminKey": "77780"
"adminName": "Chloe"
},
},
]
}
如果您在一个组中需要多个 subAdmin,您也可以将 subAdmin 设为一个数组。
推荐阅读
- .net-core - 收到“拒绝应用内联样式,因为它违反了以下内容安全策略”错误
- python-3.x - 熊猫数据框中的 Groupby 数组
- php - 验证 Microsoft Graph 访问令牌
- angular - 如何在另一个组件中切换 mat-sidenav?
- javascript - 如何将数据从 HTML 发送到 .MDF 文件,从 .MDF 检索数据到 .EXE,并将结果从 .EXE 返回到 HTML?
- c++ - 为什么不执行“部分 RVO”?
- javascript - Material UI Snackbar 的背景颜色未被覆盖
- maven - 是否可以在 pom.xml 中使用条件
- php - 代码同时执行 if 和 else 语句我该如何解决?
- continuous-integration - 可以在 Nexus 中代理专有数据存储吗