Structuring data for chat app in Firebase

后端 未结 2 1653
天涯浪人
天涯浪人 2021-01-31 21:29

Im following Firebase guide to structuring data for a chat app. They suggest the structure as seen below.

{
  // Chats contains only meta info about each conver         


        
2条回答
  •  感动是毒
    2021-01-31 21:58

    In the block where you have a list of all the chats a user is in, can you do:

    var dictionary: [String: Long]   
    var lastMessage: String 
    for chat in listOfChatsUserIsIn
        ref.child("chats").child("\(chat)").child("lastMessage").observeSingleEventOfType(.Value, withBlock: { (snapshot) in
            lastMessage = snapshot
            ref.child("chats").child("\(chat)").child("timestamp").observeSingleEventOfType(.Value, withBlock: { (snapshot) in
                //add timestamp and last message to dictionary
            }
        }
    

    I don't know how correct my syntax is. Still learning firebase. But, I think this is basically your second suggestion. Don't know how else you would get the data. This would be O(2n) though which isn't bad.

    [[Update 1]]

    I was being lazy with my code. I put lastMessage = snapshot to save it so you could add it to the dictionary in the next block.

    As for Firebase being asynchronous. I think this would still work as long as you use either the timestamp or message as the key and the other as the value in the dictionary. It may be populated out of order, but you could always sort it by timestamp later. Although, yes, this probably is not best practice.

    Jay, I like your solution. Wouldn't you have to also list uid_2: false?

    Unfortunately, it seems like both these database structures grow by n^2 as users -> inf and as chats -> inf.

提交回复
热议问题