使用<=和> =的Firestore复合查询

时间:2018-08-28 20:43:57

标签: firebase google-cloud-firestore

我需要查询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是否“手动”?这对我来说似乎是一个非常糟糕的解决方案,因为那时我可能需要加载很多数据。

1 个答案:

答案 0 :(得分:3)

您将不得不选择一个字段并查询该字段,然后在客户端过滤掉另一个字段。 Compound Queries文档在这方面是坚定的。

  

您只能在单个字段上执行范围比较(<,<=,>,> =),并且在一个字段中最多可以包含一个array_contains子句   复合查询: