Firebase 为什么Firestore在使用on_快照时发送所有结果,而不仅仅是新项目?

Firebase 为什么Firestore在使用on_快照时发送所有结果,而不仅仅是新项目?,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,我正在使用Firebase的Firestore来存储和发布新事件 在下面的代码中,我订阅了一个集合,希望在添加新项目时收到通知(此代码在浏览器上执行) 当我第一次连接时,我希望收到一个真实的快照。然而,一旦我连接到Firestore并收到一个初始快照,对于每个新项目,我只想获得UDPATE,而不是一次又一次地获取整个集合 函数查询练习(练习){ db.collection(“exercises”).where(“exercise”,“==”,exercise).onSnapshot(函数(que

我正在使用Firebase的Firestore来存储和发布新事件

在下面的代码中,我订阅了一个集合,希望在添加新项目时收到通知(此代码在浏览器上执行)

当我第一次连接时,我希望收到一个真实的快照。然而,一旦我连接到Firestore并收到一个初始快照,对于每个新项目,我只想获得UDPATE,而不是一次又一次地获取整个集合

函数查询练习(练习){
db.collection(“exercises”).where(“exercise”,“==”,exercise).onSnapshot(函数(querySnapshot){
querySnapshot.forEach(函数(doc){
var d_u2;=doc.data()
控制台日志(d_);
…和d!。。。
})
})    
}
当我向集合发布一个新项目时,我的控制台中充满了之前接收到的所有事件……换句话说,它向我发送的是完整的快照,而不仅仅是增量


是我做错了什么,还是API真的不支持增量更新?

这就是Firestore查询的工作方式。如果不提供要在集合中包含哪些文档的筛选器,则将获得该集合中的所有文档。更改此行为的唯一方法是使用where子句在查询中提供


听起来你脑子里好像有一个想法,是什么造就了你收藏中的“新”文档。您将需要使用集合中文档中的某些字段来表示这一点。通常,这将是一个时间戳类型的字段,在创建或更改文档时添加或修改该字段。这将是where子句的一部分,它决定了什么是“新的”。将此字段用作筛选器以查找新内容。

看起来我需要监听文档更改:

函数查询练习(练习){
db.collection(“exercises”).where(“exercise”,“==”,exercise).onSnapshot(函数(querySnapshot){
//\/----这个东西
querySnapshot.docChanges().forEach(函数(更改){
var d_979;=change.doc.data()
console.log(“变更类型:”,变更类型,d_u2;);
...
});
})    
}

中,我认为OP并不担心在第一个查询快照上获取所有文档,而是在所有后续快照上获取所有文档。在这种情况下,@Shahbaz的答案可能就是他们想要的(因此我把那个答案投了更高的票)。