【问题标题】:How does Firestore document snapshot work?Firestore 文档快照如何工作?
【发布时间】:2020-07-03 14:18:30
【问题描述】:
添加新文档时,快照会获取所有文档(包括新文档)还是仅获取新添加的文档?如果它每次都获取所有文档,那么它将增加计费成本。如何解决这个问题?
StreamBuilder(
stream:Firestore.instance
.collection('chat')
.orderBy('timeStamp', descending: true).snapshots(),
builder: (context, streamSnapshot) {}
);
【问题讨论】:
标签:
firebase
flutter
google-cloud-firestore
【解决方案1】:
当您的snapshots() 侦听器保持活动状态时,服务器会主动监视与您的侦听器相关的更改。当发生此类更改时,它只会向您的客户发送新文档或已更改的文档。然后客户端将这些更新与其本地数据合并,并为您呈现一个新的完整QuerySnapshot。
【解决方案2】:
根据官方文档:Here
有两种方法可以检索存储在 Cloud Firestore 中的数据。这些方法中的任何一种都可以用于文档、文档集合或查询结果:
- 调用方法获取数据。
- 设置侦听器以接收数据更改事件。
当您设置监听器时,Cloud Firestore 会向您的监听器发送数据的初始快照,然后在每次文档更改时发送另一个快照。
您可以使用 QuerySnapshot 的 docs 属性获取文档快照的数组。之后,您必须循环获取文档快照的数据以查找您的文档。
或如果您实际上不需要完整的 QuerySnapshot,则可以在对查询对象调用 get 之前使用 where 函数应用过滤器
这些是获取文档的最有效方式。