如何使用 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

如何使用 react-redux-firebase 从 firestore 获取子集合

如何使用 Flutter 配置 Firebase Firestore 设置