Согласно документации Firebase, вы должны сгладить ваши данные , и, поскольку вы уже делаете это, ваша структура должна быть в порядке. Это также означает, что вам потребуется выполнить два запроса для получения сообщений.
Из документации Firebase:
Если данные вместо этого разбиты на отдельные пути, также называемые денормализацией, их можно эффективно загружать в отдельных вызовах по мере необходимости. Рассмотрим эту уплощенную структуру:
{
// Chats contains only meta info about each conversation
// stored under the chats's unique ID
"chats": {
"one": {
"title": "Historical Tech Pioneers",
"lastMessage": "ghopper: Relay malfunction found. Cause: moth.",
"timestamp": 1459361875666
},
"two": { ... },
"three": { ... }
},
// Conversation members are easily accessible
// and stored by chat conversation ID
"members": {
// we'll talk about indices like this below
"one": {
"ghopper": true,
"alovelace": true,
"eclarke": true
},
"two": { ... },
"three": { ... }
},
// Messages are separate from data we may want to iterate quickly
// but still easily paginated and queried, and organized by chat
// conversation ID
"messages": {
"one": {
"m1": {
"name": "eclarke",
"message": "The relay seems to be malfunctioning.",
"timestamp": 1459361875337
},
"m2": { ... },
"m3": { ... }
},
"two": { ... },
"three": { ... }
}
}
Также из документации:
Теперь можно выполнять итерацию по списку комнат, загружая только несколько байт на разговор, быстро выбирая метаданные для перечисления или отображения комнат в пользовательском интерфейсе. Сообщения можно извлекать отдельно и отображать по мере их поступления, что позволяет интерфейсу оставаться быстрым и отзывчивым.