Firestore查询地图的不存在键

时间:2020-05-21 13:53:16

标签: flutter google-cloud-firestore

我知道可以对具有空值的字段进行空查询。

对于我来说,我有一些包含Map的文档,我想查询所有不包含给定键的文档。就我而言,此密钥是字符串格式的日期。

我确实尝试使用以下代码执行此操作,但是它不起作用。相反,它获取所有文档

  Stream<List<Employee>> availableEmployeesForGivenDesignation(
      String designation, DateTime date) {
    // in firstore the keys of a map are Strings, thus I have to change DateTime to String
    var formatter = new DateFormat('yyyy-MM-dd');
    String formatedDate = formatter.format(date);
    //todo check why I am getting with null also the false employees
    return _employeeCollection
        .where('designations', arrayContains: designation)
        .where('busy_map.$formatedDate', isEqualTo: null) 
        .snapshots()
        .map((snapshot) {
      return snapshot.documents
          .map((doc) => Employee.fromEntity(EmployeeEntity.fromSnapshot(doc)))
          .toList();
    });
  }

据我了解,我正在查询地图密钥,对于某些文档,此密钥(日期)并不总是存在。这就是为什么我试图获取这些在这种情况下返回null的文档的原因。

数据库结构:

enter image description here

1 个答案:

答案 0 :(得分:0)

找到答案...

我必须将以下行更改为:

.where('busy_map.$formatedDate', isNull: true)

因此,不要使用isEqual,而要使用isNull