Я занимаюсь разработкой приложения для чата с использованием Firebase Realtime DB и облачных функций.У меня проблема с структурой моей БД и с тем, как извлечь узлы Chat
, частью которых является User
.Моя БД имеет следующую структуру:
{
"chats" : {
"chatId1" : {
"lastMessage" : "example of last message",
"timestamp" : "11111"
},
"chatId2" : {
"lastMessage" : "generic last message",
"timestamp" : "22222"
}
},
"members" : {
"chatId1" : {
"uid1" : true,
"uid2" : true
},
"chatId2" : {
"uid1" : true,
"uid3" : true
}
},
"users" : {
"uid1" : {
"name" : "UserName1"
},
"uid2" : {
"name" : "UserName2"
},
"uid3" : {
"name" : "UserName3"
}
}
}
. На данный момент я нашел это решение: https://stackoverflow.com/a/37579607/7403707,, которое предлагает добавить users
дочерний узел под каждым /chats
дочерним и выполнить глубокоезапрос.Но после прочтения документации и просмотра нескольких видео я обнаружил, что это далеко не оптимально, поскольку загружается все дерево.Я подумал также о том, чтобы создать отдельный узел с именем /userChats
, который будет иметь следующую структуру:
{
"userChats" : {
"uid1" : {
"chatId1" : true,
"chatId2" : true
},
"uid2" : {
"chatId1" : true
},
"uid3" : {
"chatId3" : true
}
}
}
, и выполнить следующие действия:
- Выбрать из
/userChats
все ключи ( chatIds ) определенного пользователя (например, пользователя с id = uid1 ). - Выполните для каждого ключа (chatId) полученного снимка еще одна выборка, которая будет еще одним снимком со значением типа
Chat
. - Сохранение всех выбранных
Chat
объектов в Array
. - Передайте этот массив адаптеру
recyclerView
моего приложения.
Каковы ваши предложения?Надеюсь, я бы хотел, чтобы он работал с Firebase RecyclerView
, если это возможно.Спасибо.