我将Firestore与网络javascript sdk一起使用。 假定以下方案:
用户文档->朋友收藏
我想知道何时有人对其进行更改/删除/添加数据。
所以我写的是这样的:
friendsCollectionRef.onSnapshot(snapshot => {
snapshot.docChanges().forEach(change => {
onChange(change);
});
});
问题是,每当刷新页面时,它都会使用上次会话中更新的数据不断调用onChange
。
有没有办法只获取新数据而不能追溯?
我想避免在所有内容上都存储“ LastUpdate”字段。
当然,这不应该在客户端执行,因为那样的话,我将为我永远不会使用的网络付费。
因此,毫无疑问地要存储布尔值isFirstCall
。
答案 0 :(得分:0)
如doc中所述,当您使用onSnapshot()
方法收听集合中的多个文档时:
第一个查询快照包含所有现有事件的已添加事件 符合查询条件的文档。这是因为你得到一套 更改使您的查询快照具有最新的初始 查询状态。
因此,每次刷新页面时,您都是从头开始调用onSnapshot()
方法,因此您将获得包含所有集合文档的第一个查询快照。
换句话说,我认为您将必须实现“自制”机制以仅获取所需的文档(可能是“ LastUpdate”字段...)。
您可能对此SO answer感兴趣,它显示了如何通过Cloud Function向Firestore文档添加createdAt
时间戳。您可以轻松地对其进行调整以记录最近的更新。如果要检测自上次提取以来已删除的文档,将会更加复杂。