firebase - 用于一对一消息传递的 Firebase 数据库结构?
问题描述
我对 Firebase 比较陌生,我正在尝试找出构建我的数据库以进行 1:1 聊天的最佳方式。
它基本上必须像 Whatsapp 一样运行——当一个人发送一条消息,然后将对话放在列表顶部时,您的活动对话在左侧,而基本的一对一聊天在右侧。
现在,我所拥有的最好的方法是创建一个 firestore“聊天”集合
chats : {
chat : { users : [user_id, user_id], messages : {user_id, message, created_at} created_at }
}
这个解决方案是否允许我:
根据登录用户获取所有聊天记录?
然后按日期对返回的聊天进行排序?
从消息集合中为每个返回的聊天获取最新消息?
在新消息上更改聊天顺序并更新最新消息?
如果所有这些都是可行的,这会有效还是有更好的方法?
任何帮助将不胜感激 - 谢谢!
解决方案
登录用户如何与他们参与的任何给定聊天相关联?
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
。
推荐阅读
- latex - 如何在 p5.js 中显示漂亮的数学方程式?
- kubernetes-helm - 是否有任何选项告诉 helm 不要等到安装后挂钩完成?
- sql - 执行存储在表列中的 SQL 语句
- python - 存储 flask-jwt 身份验证令牌。我可以/我应该存储在数据库中吗?
- python - 当我尝试运行代码时,它会出错
- bigcommerce - 有没有办法从 BigCommerce 的单个页面中删除站点导航?
- java - 如何配置 WireMock 以将 StubMappings 加载/保存到 AWS S3?
- java - org.springframework.web.HttpRequestMethodNotSupportedException:不支持请求方法“GET”
- c++-cli - 在 ref 类成员中将 System::String^ 转换为 std::string
- intellij-idea - 如何强制 IntelliJ IDEA 将所有 java 文件从空格转换为制表符?