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

时间:2017-11-14 15:00:57

标签: database firebase google-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个字段中查询范围?

1 个答案:

答案 0 :(得分:1)

作为写作,Cloud Firestore无法实现这一点,并且可能永远不可用。但是,根据您的要求,可以通过重新思考数据模型和查询来进行解决方法。

选项1:预先计算范围

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

等自动化方法

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

选项2:客户端过滤器

在这个选项中你做了一个有根据的猜测,哪个范围过滤器会最大程度地减少结果集,然后简单地对第二个过滤器做结果的客户端过滤(例如,只是忽略每个状态&lt;&#34; CA&# 34)