【问题标题】:Cloud Firestore database schema for chat app聊天应用的 Cloud Firestore 数据库架构
【发布时间】:2021-09-26 19:50:35
【问题描述】:

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

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

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

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

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

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

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

我将寻求更好的数据库架构或编写查询的方法的帮助。请 谢谢

【问题讨论】:

    标签: flutter google-cloud-firestore


    【解决方案1】:

    您需要使用Collection Group query。

    如文档中所述:

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

    【讨论】:

    • 嘿@Ktrel,您有时间查看建议的解决方案吗?
    • 嗨。是的,我做到了。我花了一点时间来了解如何正确使用..但它有所帮助。谢谢。
    猜你喜欢
    • 2016-04-27
    • 2015-12-05
    • 2019-05-29
    • 1970-01-01
    • 2018-04-15
    • 2019-02-07
    • 1970-01-01
    • 2018-06-01
    • 2019-12-09
    相关资源
    最近更新 更多