在文档和子集合中进行搜索的Firestore查询

时间:2020-05-10 12:50:44

标签: firebase flutter google-cloud-firestore

我有一个雇员文件(名称,名称,...)和一个子集合,其中包含分配给该雇员的所有班次(子集合的文件)。

在分配新班次时,我只想检索具有特定职务的员工,这意味着他们熟练地执行了此班次。

此外,我应该在子集合中进行搜索,并只提取没有相同文件的员工在要分配的同一班次的日期。

目前,我只知道如何检索具有特定称号的员工。

我无法实施的部分是我只能让那些在轮班当日有空的熟练员工分配。

 @override
  Stream<List<Employee>> availableEmployeesForGivenDesignation(String designation, DateTime statusDate) {
    return _employeeCollection
        .where('designation', isEqualTo: designation)
        .snapshots()
        .map((snapshot) {
         //todo search in the sub-collection
          ...
        });
  }

1 个答案:

答案 0 :(得分:2)

Firestore查询仅适用于单一类型的集合。无法在单个查询中同时搜索雇员及其班次,因此您至少需要两个查询。

要允许用例进行单个查询,您必须复制数据。您在那里有两个选择:

  1. 将必要的轮班数据复制到员工文档中,然后仅查询员工集合。
  2. 将必要的员工数据复制到他们的轮班文档中,然后在所有轮班集合中执行collection group query

鉴于您所描述的第二种选择听起来最有前途。看起来像这样:

db.collectionGroup("shifts")
  .where('designation', isEqualTo: designation)
  .where(...your other condition...)
  .snapshots()
  .map((snapshot) {
    print(snapshot.reference.parent().parent().documentID);
  })

然后您将使用该文档ID查找员工文档。