我需要像这样得到远程数据。
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个字段中查询范围?
答案 0 :(得分:1)
作为写作,Cloud Firestore无法实现这一点,并且可能永远不可用。但是,根据您的要求,可以通过重新思考数据模型和查询来进行解决方法。
在此选项中,您可以添加名为population_bracket
的字段。在这里,您基本上将人口值放入可以测试的括号中。可以根据需要手动决定范围,也可以使用ceil(log(population))
例如,CA的总数大约为39250000,因此使用对数方法ceil(log(population))
得到8,这是我们在population_bracket
中存储的内容。如果我们将人口范围过滤器更改为<= 1000000
,那么我们可以使用population_bracket == 6
对人口过滤进行简单的相等检查。 CA被正确排除在外!
在这个选项中你做了一个有根据的猜测,哪个范围过滤器会最大程度地减少结果集,然后简单地对第二个过滤器做结果的客户端过滤(例如,只是忽略每个状态&lt;&#34; CA&# 34)