Firestore-按子集合中的文档字段订购文档

时间:2019-06-21 03:08:06

标签: flutter google-cloud-firestore

我有一个Flutter应用程序,用户可以在其中使用Firestore RTDB互相租用物品。 rental个文档有一个chat集合,用于存储两个用户之间的聊天记录:

rentals (collection)
    rental_1 (document)
        chat (collection)
            message_timestamp_1 (document)
            message_timestamp_2 (document)
        users (array, document field)
            user_id_1 (String)
            user_id_2 (String)
    rental_2 (document)
        chat (collection)
            message_timestamp_1 (document)
        etc.

我的应用程序中有一个页面,该页面是用户涉及的所有租赁的列表视图(arrayContains字段上的简单users)。基本上,我想显示用户参与的所有聊天。但是,我想按最近的聊天(如任何普通的消息传递应用程序)排序此列表。有没有一种方法可以不必在lastUpdated文档中存储和更新rental字段(从而在每次发送消息时创建两次写入)来实现这一目标?

1 个答案:

答案 0 :(得分:0)

lastUpdated文档中添加该rental字段,并使用array-containslastUpdated字段来查询涉及用户的最新租赁文档,这将解决您的问题。正如您已经提到的那样,每条消息将花费您两次写入的费用,并且可能导致帐单陷阱,因为在chats子集合中可能会有很多消息。

或者,您可以将chats集合创建为具有字段rentalId的顶级集合,以便您可以查询该顶级集合以显示用户最近参与的租赁聊天,这将消除将一条消息写入Firestore时必须执行的两次写入。

希望有帮助。