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

У меня есть база данных 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))

    })

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

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

Всего 1 ответ


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

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

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

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

Также см: