firebase, каков наилучший способ / структура для поиска по уникальному дочернему ключу - PullRequest
0 голосов
/ 24 марта 2020

У меня есть база данных firebase, подобная этой структуре:

-groups
--{group1id}
---groupname: 'group1'
---grouptype: 'sometype'
---groupmembers
----{uid1}:true
----{uid2}:true
--{group2id}
---groupname: 'group2'
---grouptype: 'someothertype'
---groupmembers
----{uid1}:true
----{uid3}:true
----{uid4}:true

Теперь я пытаюсь получить группы аутентифицированных пользователей. Например, для uid1 он должен вернуть мне group1id и group2id, а для uid3 он должен просто вернуть group2id.

Я пытался сделать это с помощью этого кода:

        database().ref('groups/').orderByChild('groupMembers/' + auth().currentUser.uid).equalTo('true').on('value' , function(snapshot) {


        console.log('GROUPS SNAPSHOT >> ' + JSON.stringify(snapshot))

    })

, но это возвращает значение NULL. если я удаляю «equalTo» и go, он возвращает всех дочерних элементов в «groups».

Знаете ли вы какое-либо решение или лучшее предложение структуры базы данных для этой ситуации?

1 Ответ

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

Ваша текущая структура позволяет легко получать пользователей для группы. Однако это не облегчает получение групп для пользователя.

Чтобы также было легко читать группы для пользователя, вам необходимо добавить дополнительную структуру данных:

userGroups: {
  uid1: {
    group1id: true,
    group2id: true
  },
  uid2: {
    group1id: true,
    group2id: true
  },
  uid3: {
    group2id: true
  },
  uid3: {
    group2id: true
  }
}

Теперь, конечно, вам нужно обновить /userGroups и /groups, когда вы добавляете пользователя в группу (или удаляете его из нее). Это часто встречается при моделировании данных в базах данных No SQL: вам может потребоваться изменить структуру данных для сценариев использования, поддерживаемых вашим приложением.

См. Также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...