首页 > 解决方案 > 用于一对一消息传递的 Firebase 数据库结构?

问题描述

我对 Firebase 比较陌生,我正在尝试找出构建我的数据库以进行 1:1 聊天的最佳方式。

它基本上必须像 Whatsapp 一样运行——当一个人发送一条消息,然后将对话放在列表顶部时,您的活动对话在左侧,而基本的一对一聊天在右侧。

现在,我所拥有的最好的方法是创建一个 firestore“聊天”集合

chats : {
chat : { users : [user_id, user_id], messages : {user_id, message, created_at} created_at } 
}

这个解决方案是否允许我:

如果所有这些都是可行的,这会有效还是有更好的方法?

任何帮助将不胜感激 - 谢谢!

标签: firebasegoogle-cloud-firestore

解决方案


登录用户如何与他们参与的任何给定聊天相关联?

chat现在,鉴于“user_id”嵌套在文档中,您的结构似乎无法轻松处理此问题。

就个人而言,这就是我会做的。

首先,我将创建 2 个集合,一个chats称为users. users将具有以下结构:

{"users": {
    "userID_1": {
        "name": "John",
        "surname": "Smith",
        "chats": [
            "chatID_1",
            "chatID_2",
            "chatID_3"
        ]
    },
    "userID_2": {
        "name": "Betty",
        "surname": "Sue",
        "chats": [
            "chatID_1",
            "chatID_4"
        ]
    }
}}

聊天将改为这样存储:

{"chats": {
    "chatID_1": {
        "chatName": "foo",
        "otherInfo": "..",
        "messages": {
             "messageID_1": {"senderID": "..", "message": "..", "timestamp": 999},
             "messageID_2": {"senderID": "..", "message": "..", "timestamp": 999}
        }
    },
    "chatID_2": {
        "chatName": "bar",
        "otherInfo": "..",
        "messages": {
            ...
        }
    }
}}

这样,当用户登录时,您可以通过 query 轻松获取他的所有聊天记录users.userID.chats,并通过 query 检索任何选定聊天的内容chats.chatID.messages


推荐阅读