Firebase Firestore,仅从集合中获取客户端缓存中不存在的文档

Firebase Firestore,仅从集合中获取客户端缓存中不存在的文档,firebase,react-native,google-cloud-firestore,Firebase,React Native,Google Cloud Firestore,我正在使用firestore实现一对一的聊天应用程序,其中有一个名为chat的集合,因此集合中的每个文档都是不同的线程 当用户打开应用程序时,屏幕应该显示该用户的所有线程/对话,包括那些有新消息的线程/对话(就像whatsapp中的一样)。显然,一种方法是从chat集合中获取与此用户关联的所有文档 然而,这似乎是一个非常昂贵的操作,因为用户可能只有很少的更新线程(带有新消息的线程),但我必须获取所有线程 是否有一种优化且成本较低的方法来执行相同的操作,即仅获取具有新消息的线程,或者更准确地说,获

我正在使用firestore实现一对一的聊天应用程序,其中有一个名为
chat
的集合,因此集合中的每个文档都是不同的
线程

当用户打开应用程序时,屏幕应该显示该用户的所有线程/对话,包括那些有新消息的线程/对话(就像whatsapp中的一样)。显然,一种方法是从
chat
集合中获取与此用户关联的所有文档

然而,这似乎是一个非常昂贵的操作,因为用户可能只有很少的更新线程(带有新消息的线程),但我必须获取所有线程

是否有一种优化且成本较低的方法来执行相同的操作,即仅获取具有新消息的线程,或者更准确地说,获取用户设备缓存中不存在的线程(新创建或修改的线程)

chat
集合中的每个文档都有以下字段:

senderID: (id of the user who have initiated the thread/conversation)
receiverID: (id of the other user in the conversation)
messages: [],
lastMsgTime: (timestamp of last message in this thread)
当前要加载某个用户的所有线程,我将应用以下查询:

const userID = firebase.auth().currentUser.uid
firebase.firestore().collection('chat').where('senderId', '==', userID)
firebase.firestore().collection('chat').where('receiverId', '==', userID)

最后,我将这两个查询返回的文档合并到一个数组中,以呈现在一个平面列表中。

为了知道特定的线程/文档是否已更新,服务器必须读取该文档,这是您试图避免的收费操作

唯一常见的解决方法是让客户机跟踪上次联机的时间,然后查询自那时以来修改过的文档。但是,如果您想同时显示现有文档和新文档,这必须是一个单独的查询,这意味着它将在缓存的一个单独区域中结束。因此,在这种情况下,您必须在Firestore的基础上设置自己的脱机存储,这比我通常愿意做的工作要多