聊天应用程序的 Cloud Firestore 数据库架构

时间:2021-07-19 05:42:42

标签: flutter google-cloud-firestore

我正在根据此链接上的指南构建一个聊天应用程序:https://medium.com/flutter-community/a-chat-application-flutter-firebase-1d2e87ace78f

不同之处在于,在我的聊天应用中,两个用户之间的对话涉及特定主题。例如 user1 和 user2 之间的对话将是关于主题 1。

有用户发布的主题列表,当用户点击主题时,他/她可以与主题所有者聊天以进行澄清。

在指南中,对话是这样存储的: Firestore.instance .collection('消息') .document(chatId) .collection(chatId)。 .doc(时间戳)...

sample image from the guide

但是由于在我的案例中的每条消息都与特定主题有关,因此我正在使用 Firestore.instance .collection('消息') .doc(主题ID) .collection("subjectId") .document(chatId) .collection(chatId)。 .doc(时间戳)...

现在我的问题:当用户点击一个主题并开始与所有者聊天时,检索消息并将其显示在聊天室(聊天页面)中不是问题,因为我知道特定的主题 ID 并且我可以检索与它的消息。 但是我有一个消息页面,用户可以在其中查看他/她参与的所有聊天。 像这样:

enter image description here

但由于我没有特定的 subjectId,我无法编写查询来检索 chatId 包含我的 userId 的所有对话。

我会帮助更好地使用数据库架构或编写查询的方法。请 谢谢

1 个答案:

答案 0 :(得分:1)

您需要使用 Collection Group query

如文档中所述:

<块引用>

一个集合组由所有具有相同 ID 的集合组成。经过 默认情况下,查询从您的单个集合中检索结果 数据库。使用集合组查询从一个集合中检索文档 集合组而不是来自单个集合。