Flutter Flatter/Dart Firestore查询:如果今天在文档的开始/结束日期之间,如何获取所有文档?

Flutter Flatter/Dart Firestore查询:如果今天在文档的开始/结束日期之间,如何获取所有文档?,flutter,dart,google-cloud-firestore,Flutter,Dart,Google Cloud Firestore,我有一个查询,应该(应该)得到所有的文档,它们的“DateLive”小于今天,而“DateEnds”大于今天。因此,文档是“活动”的,而不是“结束” 这是我的省道查询 final todayAM = RepoUtil.todayTime000001(); final todayPM = RepoUtil.todayTime235959(); final querySnapshot = await _db .collection('things') .where('deleted'

我有一个查询,应该(应该)得到所有的文档,它们的“DateLive”小于今天,而“DateEnds”大于今天。因此,文档是“活动”的,而不是“结束”

这是我的省道查询

final todayAM = RepoUtil.todayTime000001();
final todayPM = RepoUtil.todayTime235959();
final querySnapshot = await _db
    .collection('things')
    .where('deleted', isEqualTo: false)
    .where('datelive', isLessThan: todayAM)
    .where('dateends', isGreaterThan: todayPM)
    .where('localzips', arrayContainsAny: localZips)
    .limit(100)
    .get();
final thingsJson = querySnapshot.docs.map((doc) => doc.data()).toList();
return thingsJson.map((thingJson) => Thing.fromJson(thingJson)).toList();
当我运行该应用程序时,我得到了这个错误,我理解,但不知道如何解决

I/Flatter(1781):ThingView错误ThingListError([],'package:cloud\u firestore/src/query.dart':失败的断言:第484行位置18:'HasInquality==field':所有带有不等式(=)的筛选器必须位于同一个字段上。但是您在'FieldPath([datelive])和'FieldPath([dateends])上有不等式筛选器。错误

如何编写此Firestore查询


感谢您提供的任何帮助:-)

我认为这可能是Firestore当前的一个限制。它不允许您在同一查询中对
datelive
字段执行
小于
的操作,对
dateends
字段执行
大于
的操作

只能在单个字段上执行范围(=)或不等于(!=)比较

资料来源:


我想您需要在Firestore中查询一个字段,然后在客户端上过滤另一个字段。

是的,我已经读过了。我不知道将大量文档加载到手机内存中,然后进行过滤会有多好。我现在正在调查谷歌云调度器。看起来我可以创建一个计划函数,每天或半天或w/e运行,并根据文档中的两个日期更新一个isLive布尔字段。是的,同意,加载数据然后在客户端对其进行过滤将是浪费。祝你好运,谷歌云调度器,听起来是一个很好的解决方案。谢谢你的回复,我的朋友。我真的很感激:-)