【问题标题】:Cloud Firestore : Is compound range query in more than 2 fields available now?Cloud Firestore:现在是否提供超过 2 个字段的复合范围查询?
【发布时间】:2018-04-27 14:05:05
【问题描述】:

我需要像这样获取范围数据。

ex) 10 < a < 20 ,  30 < b < 40

a 和 b 两个字段现在都是索引键。

我认为在这种情况下复合范围查询是最简单的方法。

但在 Cloud Firestore 中,范围查询只能针对一个字段。

ex)   (possible) citiesRef.where("state", "==", "CA").where("population", "<", 1000000)

    (impossible) citiesRef.where("state", ">=", "CA").where("population", ">", 100000)

如何在 2 个字段中进行范围查询?

【问题讨论】:

    标签: database firebase google-cloud-firestore


    【解决方案1】:

    在撰写本文时,这对于 Cloud Firestore 是不可能的,并且很可能永远不会可用。不过,根据您的要求,可以通过稍微重新考虑您的数据模型和查询来解决问题。

    选项 1:预先计算范围

    在此选项中,您可以添加一个名为 population_bracket 的字段。在这里,您基本上将总体值放入可以测试的括号中。要么根据您的需要手动决定范围是多少,要么使用一些自动化方法,例如ceil(log(population))

    例如,CA 的人口大约为 39250000,因此使用日志方法 ceil(log(population)) 我们得到 8,这就是我们将存储在 population_bracket 中的内容。如果我们可以将人口范围过滤器更改为&lt;= 1000000,那么我们可以使用population_bracket == 6 使人口过滤器进行简单的相等性检查。 CA 被正确排除!

    选项 2:客户端过滤器

    在此选项中,您可以有根据地猜测哪个范围过滤器会最大程度地减少结果集,然后只需对第二个过滤器的结果进行客户端过滤(例如,忽略每个状态

    【讨论】:

      猜你喜欢
      • 2021-09-20
      • 2019-08-23
      • 1970-01-01
      • 1970-01-01
      • 2018-06-03
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      • 2021-05-11
      相关资源
      最近更新 更多