firebase - 查询会在任何更改时触发还是仅在结果更改时触发?
问题描述
我想知道您收听的Cloud Firestore查询是否会针对该集合的每次更改或仅当该特定查询 的结果发生更改时触发。
我主要对cloud_firestore
Flutter 插件的行为感兴趣,但是,我假设这是由后端的 Cloud Firestore 处理的。
说,我有以下查询:
Firestore.instance
.collection('scores')
.where('uid', isEqualTo: uid)
.orderBy('score', descending: true)
.limit(1)
.snapshots();
这应该只返回特定用户的最高分。
我想知道Stream
返回的 fromsnapshots
是否会因集合中的任何更改而触发,例如,当为用户添加较低分数时,或者仅当结果发生更改时,即为该用户添加更高分数时。
解决方案
通过实证研究,我发现了以下几点:
无论是否存在匹配,查询都会返回一个结果,即当用户在该集合中没有文档时也是如此。
之后,它只会在结果发生变化时触发,即当该查询返回的文档不同时。
这是在查询已经在收听时为该用户添加第一个分数、在收听时删除最高分数并向查询添加更高分数的情况。
因此, 的数量DocumentChange
将是1
或2
。
该查询将完全忽略任何添加或删除的不影响结果的文档。为了扩展实时收听,这也是强制性的。
此外,文档somwhat证实了这一点。不清楚文章开头的“内容更改”或-query 部分中的where
哪些文档(添加、删除或修改)是什么意思。但是,可以假设仅表示重要的文档和内容,我的测试已经证实了这一点。
推荐阅读
- visual-studio-code - 在 VS Code 终端中记录 JavaScript 数组
- sql - 如何执行动态过程
- swift - Tableview 单元格使动态编辑样式发生变化
- asp.net-mvc - Asp.Net core Razor Taghelpers - 强制参数
- javascript - 我可以对目录中的任何文件使用什么快速路由?
- archlinux - Arch Linux - 在我运行 startx 之前,DisplayPort 上没有输出
- android - Android 背景尺寸 - 调整大小以适合所有设备
- java - 服务器和客户端之间的通信标准
- java - 使用 oracle 序列和序列生成器创建字符串 ID
- android - 抽象服务接口改造