Cloud Firestore:现在可以使用 2 个以上字段的复合范围查询吗?

Cloud Firestore : Is compound range query in more than 2 fields available now?

我需要像这样获取远程数据。

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 个字段中进行范围查询?

在撰写本文时,Cloud Firestore 无法做到这一点,而且很可能永远无法实现。不过,根据您的要求,可以通过稍微重新考虑您的数据模型和查询来解决问题。

选项 1:预先计算范围

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

例如,CA 的人口大约为 39250000,因此使用对数方法 ceil(log(population)) 我们得到 8,这就是我们要存储在 population_bracket 中的值。如果我们同意将人口范围过滤器更改为 <= 1000000,那么我们可以使用 population_bracket == 6 使人口过滤器成为一个简单的相等性检查。 CA 被正确排除!

选项 2:客户端过滤器

在这个选项中,您可以有根据地猜测哪个范围过滤器将最大程度地减少结果集,然后简单地对第二个过滤器的结果进行客户端过滤器(例如,忽略每个状态 <“CA”)