Следующее руководство Firebase по структурирование данных для чата. Они предлагают структуру, как показано ниже.
{
// Chats contains only meta info about each conversation
// stored under the chats 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
// converation ID
"messages": {
"one": {
"m1": {
"name": "eclarke",
"message": "The relay seems to be malfunctioning.",
"timestamp": 1459361875337
},
"m2": { ... },
"m3": { ... }
},
"two": { ... },
"three": { ... }
}
}
Как структурировать свои пользовательские данные, чтобы я мог легко отображать список всех чатов, в которых они являются, и для каждого из них отображает последнее сообщение и временную метку. Если я сделаю следующую структуру:
"users": {
"ghopper": {
"name": "Gary Hopper",
"chats": {
"one: true",
"two": true
}
},
"alovelace" { ... }
},
Я могу легко получить список каждой группы чатов для конкретного пользователя, например, ghopper, выполнив (в быстрой):
ref.child("users").child("ghopper").child("chats").observeSingleEventOfType(.Value, withBlock: { (snapshot) in
//do something with data
}
Однако в этом снимке я не буду иметь lastMessage и timestamp. Что мне нужно сделать для доступа к этим данным?
- Дублировать все эти данные для каждого пользователя? добавив пользователей /ghopper/chats/one/ { "lastMessage": "ghopper: обнаружена неисправность реле. Причина: moth.", "timestamp": 1459361875666}
- Сделать запрос для "chats/specificGroupId" для каждого чата, частью которого является пользователь (добавление нескольких списков)?
- Другой способ?