Flutter firebase获取今天在字段之间的文档-日期范围(startDate / endDate)[重复]
Posted
技术标签:
【中文标题】Flutter firebase获取今天在字段之间的文档-日期范围(startDate / endDate)[重复]【英文标题】:Flutter firebase get documents where today is in between to fields - date range (startDate / endDate) [duplicate] 【发布时间】:2020-12-20 00:21:09 【问题描述】:我的 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': 失败 断言:第 490 行 pos 18:'hasInequality == field':所有地方 具有不等式( 或 >=)的过滤器必须位于同一 场地。但是您在 'FieldPath([startDate])' 和 'FieldPath([endDate])'.
但是在不过滤客户端的情况下必须有一个解决我的问题的方法。是否有可能为此创建一个索引,如果可以,它是什么样的?另一种方法是将日期范围保存在一个字段中而不是 startDate/endDate 中,但在这里我会更少知道如何过滤它。 SQL 中这么简单的问题,在 Firebase 中却很难……
亲切的问候,
雅各布
【问题讨论】:
【参考方案1】:是的,“必须有”,但没有。你必须更实际一点。我也有类似的情况,但就我而言,我知道(我的代码、我的规则)事件不到一周。为了减少查询中读取的文档数量,我过滤了
.where('startDate', isLessThanOrEqualTo: dateTimePlusMaximumEventInterval)
.where('startDate', isGreaterThanOrEqualTo: dateTimeMinusMaximumEvntInterval)
(即小于未来的最大事件间隔,并且不超过过去的最大事件长度) ...然后在本地完成其余的工作。
这与 Firestore 如何使用索引快速拆分结果并以可扩展的方式分片数据有关。
【讨论】:
不幸的是,对我来说,周期也可能会更长。对于双重问题,我也很抱歉,但我希望在超过 1 1/2 年后有新的机会。我可能会去它并在本地过滤它,因为它(大多数情况下,不幸的是并非总是)相对较少的文档。我会接受你的回答,因为这是另一个问题的答案的另一种可能性,我的问题是重复的。以上是关于Flutter firebase获取今天在字段之间的文档-日期范围(startDate / endDate)[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Flutter Web Firebase - 通过子集合字段获取集合
如何使用 Flutter 从 Firebase 获取当前活跃用户?
如何在 Flutter 中从 Firebase Auth 获取用户 ID?