【发布时间】:2018-04-22 11:35:30
【问题描述】:
我有以下查询以根据所需类别返回项目列表,并且创建日期大于或等于我提供的值。
return this.firestore.col$('Items', ref =>
ref.where(required.programming, '>', 0)
.where('name', '==', itemName)
.where('createdAt', '>=', this.mostRecentDate)
.orderBy("createdAt", "asc").limit(50))
)
由于 firebase 不查询数组的字段,我不得不将我的数据构造为键的对象。 firebase 提供的解决方法是提供一个结构,其中每个类别都是地图中的键,值是 unix 时间戳(以便可以对其进行索引)。
现在的问题是 Firebase 无法处理不同字段的多个范围比较。
you can only perform range comparisons (<, <=, >, >=) on a single field:
什么是解决这个问题的好方法?
【问题讨论】:
-
你试过删除
.orderBy("createdAt", "asc")会得到什么结果吗?我怀疑结果可能已经排序,因为数据库服务器无论如何都需要对createdAt进行排序以对其进行过滤。 -
它仍然无法工作,因为 firebase 只允许在每个查询的一个字段上进行范围比较
标签: javascript firebase google-cloud-firestore angularfire2