我有一个雇员文件(名称,名称,...)和一个子集合,其中包含分配给该雇员的所有班次(子集合的文件)。
在分配新班次时,我只想检索具有特定职务的员工,这意味着他们熟练地执行了此班次。
此外,我应该在子集合中进行搜索,并只提取没有相同文件的员工在要分配的同一班次的日期。
目前,我只知道如何检索具有特定称号的员工。
我无法实施的部分是我只能让那些在轮班当日有空的熟练员工分配。
@override
Stream<List<Employee>> availableEmployeesForGivenDesignation(String designation, DateTime statusDate) {
return _employeeCollection
.where('designation', isEqualTo: designation)
.snapshots()
.map((snapshot) {
//todo search in the sub-collection
...
});
}
答案 0 :(得分:2)
Firestore查询仅适用于单一类型的集合。无法在单个查询中同时搜索雇员及其班次,因此您至少需要两个查询。
要允许用例进行单个查询,您必须复制数据。您在那里有两个选择:
鉴于您所描述的第二种选择听起来最有前途。看起来像这样:
db.collectionGroup("shifts")
.where('designation', isEqualTo: designation)
.where(...your other condition...)
.snapshots()
.map((snapshot) {
print(snapshot.reference.parent().parent().documentID);
})
然后您将使用该文档ID查找员工文档。