首页 > 解决方案 > 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 中的这个要求。?

标签: mongodbmongodb-queryentity-relationship

解决方案


这是您的图形要求显示的结构。但它仍然会导致重复,因此您需要更改它。阅读一对多关系

{
 "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 设为一个数组。


推荐阅读