比方说,我有车的集合,我想price
范围和year
范围过滤。我知道,公司的FireStore有严格的限制,由于性能方面的原因,所以是这样的:
db.collection("products")
.where('price','>=', 70000)
.where('price','<=', 90000)
.where('year','>=', 2015)
.where('year','<=', 2018)
将抛出一个错误:
无效的查询。所有其中具有一个不等式过滤器(<,<=,>,或> =)必须在同一字段中。
那么,有没有到本地数据管理执行这种查询的任何其他方式?也许有些类型的索引或棘手的数据组织的?
该错误消息和文件在此十分明了:一个公司的FireStore查询仅可以在单个字段执行范围滤波。既然你要在两个price
和year
筛选范围,这是不可能在一个公司的FireStore查询。
周围有此两种常用方法:
鉴于这两个之间的工作不同,我建议你选择第一个选项。
第三个选择是你的数据不同的模型,使之更容易实现您的用例。最直接的实现,这将是把所有的产品,从2015 - 2018年为一个单一的集合。然后,你可以查询该集合与db.collection("products-2015-2018").where('price','>=', 70000).where('price','<=', 90000)
。
一个更普遍的替代方案是将产品存放每年为一个集合中,然后执行4个查询来获得你正在寻找的结果:每个集合products-2015
,products-2016
,products-2017
和products-2018
之一。
我建议你阅读document on compound queries and their limitations,并观看video on Cloud Firestore queries。