Firebase 使用文档和集合查询Flatter Firestore

Firebase 使用文档和集合查询Flatter Firestore,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我有一个firestore db和一个Flatter应用程序。数据库如下所示: Collection Doc Collection scans uid:DateTime.now() userID: 'abjnbj28snOPEAJd', scanID: 'test', data: 'abc', company: 'TH' uid:DateTime.now() userID: 'nj12djaJDJa

我有一个firestore db和一个Flatter应用程序。数据库如下所示:

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'

FirebaseFirestore.instance
              .collection('scans')
              .doc(user.uid)
              .get()
我不在用户集合中的文档中存储数据的原因是,我需要公司的管理员能够访问所有扫描,而不管根据公司名称扫描的是哪个用户。 我之所以使用uid:DateTime.now()是因为每个文档(扫描)都应该是唯一的

问题:

  • 这是处理需要参考的数据的最佳方法吗
  • 对文档ID使用uid:DateTime.now()是最好的方法吗?它需要非常独特,早些时候我只使用DateTime.now()作为users/uid/scans/DateTime/scanda下的scanID
  • 如何查询这些扫描并按用户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'];
                });
    

    您可以将用户id用作文档id,然后要按用户id进行筛选,可以执行以下操作:

    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'
    
    
    FirebaseFirestore.instance
                  .collection('scans')
                  .doc(user.uid)
                  .get()
    
    要按公司筛选,可以使用
    where
    子句:

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

    您可以将用户id用作文档id,然后要按用户id进行筛选,可以执行以下操作:

    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'
    
    
    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
    的字段,用于在未来构建器中的集合中的所有文档中循环?我尝试了这个,但它显示了错误:类“querySnapshot”没有实例方法“[]”。您必须执行以下
    querySnapshot.docs.forEach((结果){print(result.data();})
    ,querySnapshot类有一个名为
    docs
    的字段,用于在未来构建器中集合中的所有文档中循环?