如何使用 Firebase Firestore 进行一次性简单查询?
Posted
技术标签:
【中文标题】如何使用 Firebase Firestore 进行一次性简单查询?【英文标题】:How to make a one-time simple query with Firebase Firestore? 【发布时间】:2020-06-12 03:02:15 【问题描述】:在 Dart/Flutter 和学习 Firebase Firestore...我在创建 UI 之前使用以下方法进行测试:
_testFireStore() async
var result = Firestore.instance
.collection('users')
.where('uid', isEqualTo: 'IvBEiD990Vh0D9t24l2GCCdsrAf1')
.snapshots();
await for (var snapshot in result)
for (var user in snapshot.documents)
print('main.DEBUG: ' + user.data.toString());
它按预期工作 - 最初执行打印语句,但随后每次更新 Firestore 数据库中文档中的任何字段时都会实时执行。
如何更改此代码,以便仅检索一次快照——而不是“订阅/收听”...,因此我们不会将带宽浪费在不需要/不需要的数据上,并且打印语句只执行一次?
【问题讨论】:
好的,谢谢。我认为这两个答案都有效,但道格是第一个。 【参考方案1】:使用getDocuments()
,一次检索所有文档:
_testFireStore() async
var result = await Firestore.instance
.collection('users')
.where('uid', isEqualTo: 'IvBEiD990Vh0D9t24l2GCCdsrAf1')
.getDocuments();
print(result.documents.toString());
【讨论】:
【参考方案2】:Firestore.instance.collection(...).where(...)
返回一个Query 对象。它有一个名为 getDocuments() 的方法,该方法执行查询并为您提供带有一组结果的 Future。
var query = Firestore.instance
.collection('users')
.where('uid', isEqualTo: 'IvBEiD990Vh0D9t24l2GCCdsrAf1');
query.getDocuments().then((QuerySnapshot snapshot)
// handle the results here
)
或者使用await
来获取QuerySnapshot,因为getDocumets()
返回一个Future。
【讨论】:
我尝试在“//句柄”注释所在的位置放置一个打印语句,但它从未执行。还尝试在 query.getDoc 之前放置“等待”...但结果相同。以上是关于如何使用 Firebase Firestore 进行一次性简单查询?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Firebase Firestore 获取子集合? [复制]
如何使用 Firebase 控制台从 Firestore 中删除索引?
如何使用firebase-admin在firestore中将日期保存为时间戳?
如何在 Flutter 中使用 Firebase Auth 和 Firestore