Flutter firebase 获取今天介于字段之间的文档 - 日期范围(开始日期/结束日期)

Flutter firebase get documents where today is in between to fields - date range (startDate / endDate)

我的 firestore 中有一些带有“startDate”和“endDate”的文档。 现在我想获取今天介于 startDate 和 endDate 之间的所有文档。

final DateTime dateTime = new DateTime.now();
final QuerySnapshot querySnapshot = await colRef
    .doc(docId)
    .collection('subCol')
    .where('startDate', isLessThanOrEqualTo: dateTime)
    .where('endDate', isGreaterThanOrEqualTo: dateTime)
    .get();

错误很明显:

I/flutter ( 5978): 'package:cloud_firestore/src/query.dart': Failed assertion: line 490 pos 18: 'hasInequality == field': All where filters with an inequality (<, <=, >, or >=) must be on the same field. But you have inequality filters on 'FieldPath([startDate])' and 'FieldPath([endDate])'.

但我的问题必须有一个不过滤客户端的解决方案。是否可以为此创建一个索引,如果可以,它是什么样的?另一种方法是无论如何将日期范围保存在一个字段中而不是 startDate/endDate,但在这里我更不知道如何过滤它。在 SQL 中如此简单的问题,在 Firebase 中如此困难....

亲切的问候,

雅各布

是的,“必须有”,但没有。你必须更实际一点。我有类似的情况,但就我而言,我 知道(我的代码,我的规则)活动时间不到一周。为了减少查询中读取的文档数量,我过滤了

  .where('startDate', isLessThanOrEqualTo: dateTimePlusMaximumEventInterval)
  .where('startDate', isGreaterThanOrEqualTo: dateTimeMinusMaximumEvntInterval)

(即小于未来的最大事件间隔,且不超过过去的最大事件长度) ...然后在本地完成剩下的工作。

这与 Firestore 如何使用索引快速拆分结果并以可缩放的方式分片数据有关。