如何在flutter中按firebase cloud firestore中的子集合中的字段进行排序



我正在尝试查询云firestore数据库,我需要它返回由时间戳字段排序的聊天集合中的所有文档,该字段是消息子集合中所有文档的字段。

我试着写一个这样的查询。

FirebaseFirestore.instance.collection("chats").orderBy("messages.timestamp", descending: true)].get(),

但是它没有返回任何文档,而实际上那里有一些文档

Firestore只能对它返回的文档中的数据进行排序或筛选。无法对这些文档之外的数据进行排序或筛选。

因此,如果我们想在聊天中最后一条消息的时间戳中排序聊天(一个常见的用例),您必须在聊天文档本身中包含lastMessageTimestamp字段,并在其messages子集合中写入消息时更新该字段。在每个chats文档中都有lastMessageTimestamp字段,然后您可以对其进行排序和过滤。

创建一个名为messages的新集合,并在其中存储每个用户的所有消息(带有用户id字段)。通过每个聊天中的数组引用消息uid。这样,您可以轻松地查询与聊天会话相关的消息,然后对它们进行排序。

最新更新