Dmi*_*nko 4 nosql firebase google-cloud-firestore
假设我有一些汽车,我想按price范围和year范围过滤它们。我知道由于性能原因,Firestore具有严格的限制,因此类似:
db.collection("products")
.where('price','>=', 70000)
.where('price','<=', 90000)
.where('year','>=', 2015)
.where('year','<=', 2018)
Run Code Online (Sandbox Code Playgroud)
会抛出一个错误:
查询无效。不等式(<,<=,>或> =)的所有过滤器都必须位于同一字段上。
那么,有没有其他方法可以执行这种查询而无需本地数据管理?也许是某种索引或棘手的数据组织?
错误消息和文档对此非常明确: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。
我建议阅读有关复合查询及其限制的文档,并观看有关Cloud Firestore查询的视频。
| 归档时间: |
|
| 查看次数: |
1974 次 |
| 最近记录: |