【问题标题】:Flutter Firestore querying with docs and collections使用文档和集合进行 Flutter Firestore 查询
【发布时间】:2021-04-18 06:52:01
【问题描述】:

我有一个 Firestore 数据库和一个 Flutter 应用程序。数据库如下:

Collection    Doc                   Collection
scans         uid:DateTime.now()    userID: 'abjnbj28snOPEAJd', scanID: 'test', data: 'abc', company: 'TH'
              uid:DateTime.now()    userID: 'nj12djaJDJaihinf', scanID: 'test2', data: 'xyz', company: 'PH'

我不将数据存储在用户集合中的文档中的原因是,我需要公司管理员能够访问所有扫描,无论根据公司名称扫描哪个用户。 我使用 uid:DateTime.now() 的原因是每个文档(扫描)都应该是唯一的。

问题:

  1. 这是处理需要参考的数据的最佳方法吗?
  2. 是否对文档 ID 使用 uid:DateTime.now() 最佳方法?它需要非常独特,之前我只在 users/uid/scans/DateTime/scanData 下使用 DateTime.now() 作为 scanID。
  3. 如何查询这些扫描并按用户 ID、公司或扫描 ID 过滤?

这就是我现在的做法,这会导致不同类型的错误:

FutureBuilder(
          future: FirebaseFirestore.instance
              .collection('scans')
              .orderBy('dateTime', descending: true)
              .limit(10)
              .where('userID', isEqualTo: user.uid)
              .get()
          builder: (context, AsyncSnapshot snapshot) {
            if (!snapshot.hasData) {
              return CircularProgressIndicator();
            } else {
              print(snapshot.data['userID'];
            });

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

    您可以使用用户ID作为文档ID,然后按用户ID进行过滤,您可以执行以下操作:

    FirebaseFirestore.instance
                  .collection('scans')
                  .doc(user.uid)
                  .get()
    

    要按公司过滤,您可以使用where 子句:

    FirebaseFirestore.instance
                  .collection('scans')
                  .where('company', isEqualTo: 'TH')
                  .get()
    

    【讨论】:

    • 我试过这个,但它显示错误:类'QuerySnapshot'没有实例方法'[]'。
    • 您必须执行以下操作querySnapshot.docs.forEach((result) { print(result.data()); });,querySnapshot 类有一个名为docs 的字段可以在集合中的所有文档中循环
    • 在未来的建设者中?
    猜你喜欢
    • 2021-04-08
    • 1970-01-01
    • 2020-03-08
    • 2021-11-18
    • 2021-09-29
    • 1970-01-01
    • 2021-07-12
    • 2020-12-02
    • 1970-01-01
    相关资源
    最近更新 更多