我正在尝试查询云firestore数据库,我需要它返回由时间戳字段排序的聊天集合中的所有文档,该字段是消息子集合中所有文档的字段。
我试着写一个这样的查询。
FirebaseFirestore.instance.collection("chats").orderBy("messages.timestamp", descending: true)].get(),
但是它没有返回任何文档,而实际上那里有一些文档
Firestore只能对它返回的文档中的数据进行排序或筛选。无法对这些文档之外的数据进行排序或筛选。
因此,如果我们想在聊天中最后一条消息的时间戳中排序聊天(一个常见的用例),您必须在聊天文档本身中包含lastMessageTimestamp
字段,并在其messages
子集合中写入消息时更新该字段。在每个chats
文档中都有lastMessageTimestamp
字段,然后您可以对其进行排序和过滤。
创建一个名为messages
的新集合,并在其中存储每个用户的所有消息(带有用户id字段)。通过每个聊天中的数组引用消息uid。这样,您可以轻松地查询与聊天会话相关的消息,然后对它们进行排序。