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



我需要获得这样的范围数据。

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")

最新更新