【发布时间】:2021-09-12 06:04:51
【问题描述】:
我试图澄清 Firestore 查询快照更新在文档更改时的语义。 "Listen to multiple documents in a collection" doc 说:
每次查询结果更改(即添加、删除或修改文档时)时,快照处理程序都会收到一个新的查询快照。
我的问题是,如果更新了快照中已经存在的文档,它会总是触发新的查询快照吗?即使对文档的更改与原始查询无关?这是在某处记录的吗? (具体来说,“查询结果变化”的定义是什么?)
考虑一个集合中包含多个现有文档的案例。首先查询所有文档,例如:
db.collection("cities").onSnapshot(snapshot => { ... })
现在,如果在集合中创建了一个新文档,或者删除了一个文档,onSnapshot 回调将被这些更改重新调用,因为“查询结果”不同。
但是,如果在调用初始 onSnapshot 回调之后修改了该示例集合中的文档,会发生什么情况? (例如,将新属性添加到“城市”文档之一。)是否总是调用onSnapshot 回调来报告此修改的文档?这算作更改“查询结果”吗?返回的文档集并没有什么不同,所以看起来这种变化可能不会在集合查询中报告?
事实上,我在我的应用程序中看到了一些奇怪的行为,我正在尝试仔细检查 onSnapshot 集合更新的语义。相比之下,the documentation 用于单文档 onSnapshot 语义更清楚地报告所有内容更改:
使用您提供的回调的初始调用会立即使用单个文档的当前内容创建文档快照。然后,每次内容更改时,另一个调用会更新文档快照。
但我无法为集合快照文档找到类似的清晰度。
【问题讨论】:
标签: firebase google-cloud-firestore