Flutter + Firestore:如何从Firestore查询中获取子集合流

时间:2020-11-02 11:03:04

标签: firebase flutter dart google-cloud-firestore

我正在尝试从Flutter应用中的Firestore中的查询结果中获取子集合流:

employees
|_employeeId
  |_linkedUserUid(String)
  |__timeLogs(Collection)
      |_docs

我的员工集合有一个名为linkedUser的字段,它是一个带有员工UID的字符串。 (由于并非所有员工都是用户,因此员工的doc ID与用户ID不同)

在每个员工文档下都有一个名为timeLogs的子集合

在我的Flutter应用中,我首先尝试查询雇员集合以查找与用户相关的雇员文档,然后尝试找到子集合timeLogs,然后尝试创建自定义类的列表用于时间记录。我无法达到第二个功能:

getTimeLogs(String uid) async {
    employeesCollection.where('linkedUser', isEqualTo: uid).getDocuments().then((snapshot) {
      return snapshot.documents.forEach((doc) {
        return doc.reference.collection('timeLogs')
            .orderBy('timestamp').limit(10)
            .snapshots().map(_timeLogListFromSnapshot);
      });
    });
  }

List<Timelog> _timeLogListFromSnapshot(QuerySnapshot snapshot) {
    print('Here !');
    return snapshot.documents.map((doc) {
      return Timelog(
        timestamp: doc.data["timestamp"],
        type: doc.data["type"]
      );
    }).toList();
  }

我一直在使用此Stream来在真正运行良好的应用中进行多次建模,例如:

// Employees Stream
  Stream<List<Employee>> get employees {
    return employeesCollection.snapshots().map(_employeeListFromSnapshot);
  }
  // Employees List
  List<Employee> _employeeListFromSnapshot(QuerySnapshot snapshot) {
    return snapshot.documents.map((doc) {
      return Employee(
        eId: doc.data["eId"],
        employeeCode: doc.data["employeeCode"],
        fName: doc.data["fName"],
        lName: doc.data["lName"],
        docId: doc.documentID
      );
    }).toList();
  }

我想实现相同的功能,但对于该查询->嵌套收集方法。有关如何执行此操作的任何建议或方法?

0 个答案:

没有答案