我有一个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
字段(从而在每次发送消息时创建两次写入)来实现这一目标?
答案 0 :(得分:0)
在lastUpdated
文档中添加该rental
字段,并使用array-contains
和lastUpdated
字段来查询涉及用户的最新租赁文档,这将解决您的问题。正如您已经提到的那样,每条消息将花费您两次写入的费用,并且可能导致帐单陷阱,因为在chats
子集合中可能会有很多消息。
或者,您可以将chats
集合创建为具有字段rentalId
的顶级集合,以便您可以查询该顶级集合以显示用户最近参与的租赁聊天,这将消除将一条消息写入Firestore时必须执行的两次写入。
希望有帮助。