пн go дБ как хранить мульти отношения как граф - PullRequest
0 голосов
/ 28 марта 2020

Мне нужно хранить некоторых пользователей и их групповые отношения, как показано ниже

enter image description here

Поэтому я планирую создать коллекцию, как показано ниже

UserGroupRelation Collections

{
"user":String,
"Group":String"
}

пример коллекций для супер администраторов

{
"user":"Adminuser-1",
"Group":"Group1"
}


{
"user":"Adminuser-1",
"Group":"Group2"
}

{
"user":"Adminuser-1",
"Group":"Group3"
}

, где столбец user & Group проиндексирован, и я буду работать под видом запроса

1. Всякий раз, когда я хочу проверить, имеет ли данный пользователь доступ к данной группе

db.UserGroupRelation.find(  { user: "Adminuser-1", Group: "Group2"   })

2. Также я хочу удалить все ассоциации всякий раз, когда мы удаляем группу

db.UserGroupRelation.deleteMany({  Group: "Group2" })

3.Также найти всех пользователей группы

 db.UserGroupRelation.find(  { Group: "Group2"   })

4.Найти иерархии ?, с моим подходом я не могу найти

Но с этим подходом я Дублирование большого количества данных также в режиме реального времени может иметь 10000 групп и 1 миллион пользователей, поэтому могут возникнуть проблемы с производительностью. И с этим я не могу поддерживать иерархию, такую ​​как SuperAdmin-> SubAdmin-> user из той же группы

Я проверил с деревом mon go, но это не соответствует этому требованию , Есть ли лучший способ справиться с этим требованием в mongodb.?

1 Ответ

1 голос
/ 28 марта 2020

Это структура, которую показывают ваши графики c. Это все еще приводит к повторению, хотя вам нужно будет изменить . Читайте о отношениях один-много .

{
 "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 в группе.

...