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 如何使用索引快速拆分结果并以可缩放的方式分片数据有关。
我的 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 如何使用索引快速拆分结果并以可缩放的方式分片数据有关。