一对一消息传递的Firebase数据库结构?



我对Firebase比较陌生,我正试图找出构建1:1聊天数据库的最佳方法。

它基本上必须像Whatsapp一样工作-当一个人发送消息时,你在左侧有活跃的对话,然后对话被放在列表的顶部,然后在右侧有基本的一对一聊天。

现在我能做的最好的就是创建一个firestore "chats"收集

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

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

  • 获取基于登录用户的所有聊天记录?

  • 然后按日期排序返回的聊天记录?

  • 从消息集合中获取每个返回的聊天的最新消息?

  • 在新消息上更改聊天顺序并更新最新消息?

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

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

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

现在你的结构似乎不允许一个简单的处理这个,考虑到"user_id"嵌套在chat文档中。

我个人会这么做。

首先我要创建2个集合,一个叫chats,一个叫usersusers的结构如下:

{"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": {
...
}
}
}}

这样,当用户登录时,您可以很容易地通过查询users.userID.chats获取他的所有聊天记录,并通过查询chats.chatID.messages检索所选聊天记录的内容。