更新 Firebase 快照配置,即动态更新 Firebase 快照监听器

Update Firebase snapshot configuration i.e. Update Firebase snapshot listener where condition dynamically

我在我的聊天应用程序中使用 Firebase,并且在我的列表中使用快照侦听器 collection 以仅获取最近更新的记录。 因为快照 returns 所有 collection 记录在快照侦听器的结果中, 我想在快照中限制此处的结果以减少我的 Firebase 使用限制,特别是如果我的文档在 collection.

中发生更改

因此 我们在每个名为 updatedOn 的文档中维护一个 属性。这将告诉我们文档更新时间(以毫秒为单位)。 其中 updatedOn = Date.now()(时间以毫秒为单位)

    var db = this.getFirestore();
      db.collection("collection1")
      .doc("doc1")
      .collection("list")
      .where('updatedOn', '>=', MAX_UPDATED_TIME_VISITOR)
      .onSnapshot((datas) => {
            datas.forEach((data) => {
                mainData = data.data()
                if (MAX_UPDATED_TIME_VISITOR < mainData.updatedOn){
                    MAX_UPDATED_TIME_VISITOR = mainData.updatedOn; 
                    // second time i want to use this updated value of MAX_UPDATED_TIME_VISITOR
                   //  in where condition of snapthot
                }
            })
      });        
};

上client-side。在查询数据时,我们将添加一个 where 条件以仅查询 updatedOn 值大于 MAX_UPDATED_TIME_VISITOR 值的文档。

其中 MAX_UPDATED_TIME_VISITOR 是我 collection 中存在的所有 updatedon 值的最大值我们得到了结果。 我想在快照中发送 MAX_UPDATED_TIME_VISITOR 的修改值我该怎么做?

我已经检查了 Google 和 Whosebug,我们从快照侦听器的缓存中获取了所有未修改的文档,我已经使用这个

进行了检查

data.metadata.fromCache 并且总是返回 false。所以在这里我只想获取修改后的数据或限制我的 Firebase 快照监听器的结果集。

onSnapshot 从缓存中获取初始源,随后从服务器中获取,如 Whosebug case 中所述。一旦后端向我们发送了发出查询时与查询匹配的所有文档,“fromCache”就会从真变为假。它表明服务器已经赶上了我们的请求。之后,服务器会实时向我们发送更新,我们不会返回“fromCache: true”(除非网络连接丢失)。

参考 指出,fromCache 可能 尚未包含来自服务器的所有数据

相反,hasPendingWrites 方法可能包含服务器尚不知道的数据。也就是说,具有 metadata.hasPendingWrites 属性 的检索文档指示文档是否具有尚未写入后端的本地更改。 关于 hasPendingWrites 方法的更多详细信息,您可以参考此 document