Firestore(javascript sdk)-仅获取新数据(而不仅仅是添加)

时间:2020-03-24 11:32:19

标签: javascript firebase firebase-realtime-database google-cloud-firestore

我将Firestore与网络javascript sdk一起使用。 假定以下方案:

用户文档->朋友收藏

我想知道何时有人对其进行更改/删除/添加数据。

所以我写的是这样的:

friendsCollectionRef.onSnapshot(snapshot => {
    snapshot.docChanges().forEach(change => {
        onChange(change);
    });
});

问题是,每当刷新页面时,它都会使用上次会话中更新的数据不断调用onChange。 有没有办法只获取新数据而不能追溯?

我想避免在所有内容上都存储“ LastUpdate”字段。 当然,这不应该在客户端执行,因为那样的话,我将为我永远不会使用的网络付费。 因此,毫无疑问地要存储布尔值isFirstCall

1 个答案:

答案 0 :(得分:0)

doc中所述,当您使用onSnapshot()方法收听集合中的多个文档时:

第一个查询快照包含所有现有事件的已添加事件 符合查询条件的文档。这是因为你得到一套 更改使您的查询快照具有最新的初始 查询状态。

因此,每次刷新页面时,您都是从头开始调用onSnapshot()方法,因此您将获得包含所有集合文档的第一个查询快照。

换句话说,我认为您将必须实现“自制”机制以仅获取所需的文档(可能是“ LastUpdate”字段...)。

您可能对此SO answer感兴趣,它显示了如何通过Cloud Function向Firestore文档添加createdAt时间戳。您可以轻松地对其进行调整以记录最近的更新。如果要检测自上次提取以来已删除的文档,将会更加复杂。