Firestore组集合查询以仅返回每个子集合中的最后一个文档

时间:2019-09-14 05:04:56

标签: google-cloud-firestore

我正在Flutter中建立一个1-1聊天系统,该系统将聊天数据存储在每对聊天者的Firestore子集合中。我希望能够显示一个列表,用户可以在其中看到他的聊天伙伴及其最新消息(如Whatsapp)。我以为我可以做类似的事情:

Firestore.instance.collectionGroup('Chats').where('idFrom', isEqualTo: uid)
  .limit(1)
  .orderBy("timestamp", descending: true)
  .snapshots()

但这只是返回用户发送的最后一条消息。有人可以告诉我这是否完全可行,或者可以指出实现我正在尝试的替代方法?现在,我看到的唯一另一种选择是删除限制,然后过滤掉客户端的最后一条消息,但这似乎并不明智,因为每个子集合中的消息量可能变得非常大。 / p>

1 个答案:

答案 0 :(得分:1)

您要执行的操作无法通过单个查询完成。集合组查询将考虑所有具有相同名称的集合中的所有文档。对于每个不同的子集合,都无需特别考虑。

您要么必须分别查询每个子集合,要么将最新消息复制到仅包含该消息的另一个子集合中。