公司的FireStore多个范围查询

问题描述 投票:2回答:1

比方说,我有车的集合,我想price范围和year范围过滤。我知道,公司的FireStore有严格的限制,由于性能方面的原因,所以是这样的:

db.collection("products")
  .where('price','>=', 70000)
  .where('price','<=', 90000)
  .where('year','>=', 2015)
  .where('year','<=', 2018)

将抛出一个错误:

无效的查询。所有其中具有一个不等式过滤器(<,<=,>,或> =)必须在同一字段中。

那么,有没有到本地数据管理执行这种查询的任何其他方式?也许有些类型的索引或棘手的数据组织的?

firebase nosql google-cloud-firestore
1个回答
9
投票

该错误消息和文件在此十分明了:一个公司的FireStore查询仅可以在单个字段执行范围滤波。既然你要在两个priceyear筛选范围,这是不可能在一个公司的FireStore查询。

周围有此两种常用方法:

  1. 执行查询过滤的一个领域,并在您的客户端代码的其他领域。
  2. 结合这两个范围的值到一个单一的领域以某种方式,让您的使用情况有一个字段。这是令人难以置信的不平凡的,并且这种组合的唯一成功的例子,我知道的是使用geohashes到经度和纬度进行筛选。

鉴于这两个之间的工作不同,我建议你选择第一个选项。

第三个选择是你的数据不同的模型,使之更容易实现您的用例。最直接的实现,这将是把所有的产品,从2015 - 2018年为一个单一的集合。然后,你可以查询该集合与db.collection("products-2015-2018").where('price','>=', 70000).where('price','<=', 90000)

一个更普遍的替代方案是将产品存放每年为一个集合中,然后执行4个查询来获得你正在寻找的结果:每个集合products-2015products-2016products-2017products-2018之一。

我建议你阅读document on compound queries and their limitations,并观看video on Cloud Firestore queries

© www.soinside.com 2019 - 2024. All rights reserved.