我需要查询Firestore集合以获取开始时间(是数字)为>= slot.start
和<= slot.end
的条目。
像这样:
.collection('Entries', ref => ref.where('timeStart', '>=', slot.timeStart).where('timeEnd', '<=', slot.timeEnd))
但我收到此错误:
Invalid query. All where filters with an inequality (<, <=, >, or >=) must be on the same field.
我认为该查询可与复合索引一起使用,但由于错误提示无法正常工作。
当我将查询更改为此:
.collection('Entries', ref => ref.where('timeStart', '==', slot.timeStart).where('timeEnd', '<=', slot.timeEnd))
我可以为其创建索引。此外,当我将第二个'<='更改为'=='时,我什至不需要索引。
我不认为我的查询如此先进,并且对Firestore无法执行此查询感到有些失望。那么,解决我的问题的最佳解决方案是什么?省略这样的第二条查询语句的第二件事是
.collection('Entries', ref => ref.where('timeStart', '>=', slot.timeStart))
然后遍历结果并检查timeEnd <= entry.timeEnd
是否“手动”?这对我来说似乎是一个非常糟糕的解决方案,因为那时我可能需要加载很多数据。
答案 0 :(得分:3)
您将不得不选择一个字段并查询该字段,然后在客户端过滤掉另一个字段。 Compound Queries文档在这方面是坚定的。
您只能在单个字段上执行范围比较(<,<=,>,> =),并且在一个字段中最多可以包含一个array_contains子句 复合查询: