我的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中是如此困难。
亲切的问候,
雅各布
是的,“必须有”,但没有。您将必须更加实用。我有一个类似的情况,但对我来说,我知道(我的代码,我的规则)事件不到一周的时间长。为了减少查询中读取的文档数量,我过滤了
.where('startDate', isLessThanOrEqualTo: dateTimePlusMaximumEventInterval)
.where('startDate', isGreaterThanOrEqualTo: dateTimeMinusMaximumEvntInterval)
(即小于将来的最大事件间隔,并且不大于过去的最大事件长度)...然后在本地进行其余操作。
这与Firestore如何使用索引快速分割结果并以可扩展的方式分片数据有关。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句