我正在尝试从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();
}
我想实现相同的功能,但对于该查询->嵌套收集方法。有关如何执行此操作的任何建议或方法?