首页 > 解决方案 > 如何使用 Cloud Firestore 对聊天应用程序的聊天频道进行排序

问题描述

我正在使用 cloud firestore 设计一个聊天应用程序,架构看起来像这样:

每个 1:1 聊天都是在聊天集合中创建的。每个聊天集合都有一组字段和一个子集合。每个子集合将包含所有消息。它看起来像这样 -

/chats

* id (auto gen)
* channel ( string type - sort(uid1 , uid2) )
* uid1
* uid2
* createdTime
* lastMessageSentTime
* messages (sub collection) 
    * fromUid
    * toUid
    * content
    * sendTime

为了显示与用户聊天的所有用户的初始聊天屏幕,我查询/chats集合并按lastMessageSentTime对结果进行排序。

我在这种设计中看到的一个问题是,我需要为每条发送或接收的消息更新lastMessageSentTime 。有没有办法避免这种双重写作?

我可以使用消息子集合的sendTime以某种方式显示第一个聊天屏幕还是有其他出路?

提前致谢 !

标签: firebasegoogle-cloud-firestore

解决方案


无法根据子集合中的值查询顶级chats集合。messages

所以你有两个选择:

  1. 将其lastMessageSentTime写入聊天室文档,并在每次为该聊天室编写消息时更新它。这是你目前的提议。

  2. 确定读取数据的正确顺序。因此,您首先加载所有聊天室,然后加载每个聊天室的最新消息。

不熟悉 NoSQL 数据库的开发人员通常从第二个选项开始,而更有经验的 NoSQL 开发人员通常会选择第一个选项,因为它会导致更简单和可扩展的读取操作。


推荐阅读