我正在使用Firebase的Firestore来存储和发布新事件。
在下面的代码中,我订阅了一个集合,并希望在添加新项目时得到通知(此代码在浏览器上执行)。
当我第一次连接时,我希望收到一个真正的 * 快照 *。然而,一旦我连接到Firestore并收到了一个初始快照,对于每个新项目,我只想得到更新,而不是一遍又一遍地得到整个集合!
function queryExercise(exercise){
db.collection("exercises").where("exercise","==",exercise).onSnapshot(function(querySnapshot){
querySnapshot.forEach(function(doc){
var d_ = doc.data()
console.log(d_);
...do somethign with d_...
})
})
}
当我向集合发布一个新项目时,我的控制台充满了之前接收到的 * 所有 * 事件...换句话说,它向我发送了完整的快照,而不仅仅是增量。
是我做错了什么,还是API真的不支持增量更新?
2条答案
按热度按时间avwztpqn1#
看起来我需要在docChanges上阅读:
从https://firebase.google.com/docs/firestore/query-data/listen开始
vom3gejh2#
这就是Firestore查询的工作方式。如果你不提供一个过滤器来过滤你想要的文档,你将得到这个集合中的所有文档。改变这种行为的唯一方法是在你的查询中使用where子句来提供一个过滤器。
听起来你好像已经有了一个想法,那就是在你的文档集中什么是“新”文档。你需要在你的文档集中使用一些字段来表示它。通常这是一个时间戳类型的字段,每当文档被创建或更改时,它就会被添加或修改。这将是你的where子句的一部分,它决定什么是“新”。使用这个字段作为一个过滤器来找出什么是“新”的。It“这是新的。