通过自定义对象字段查询Google Firestore数据库

4
我有以下Google Firestore数据库结构:enter image description here
是否有一种方法可以按每个-纬度和经度的范围查询?例如,我想获取所有具有 location.lat 和 location.lng 在范围内的用户: 51.400 至 52.000 和 -0.100 至 -0.300。请问如何编写所需的查询?
编辑:我没有使用“地理点”数据类型。 我正在使用具有两个浮点数的自定义对象,并想进行简单数字比较。 问题是我不知道(也找不到)如何构建我的查询。

你所描述的是地理查询,而Firestore目前还不支持此功能。请参见https://dev59.com/jFYN5IYBdhLWcg3w9Mbr#46608540。 - Frank van Puffelen
1
感谢您的评论,弗兰克,但我已经知道了。在我的情况下,“位置”字段是一个自定义对象,它存储两个数字。我想在两个数字之间进行简单的“>”或“<”比较。 - Paul Strupeikis
2个回答

13

这应该是可能的。

userRef.where('location.lat', '>=', 51.400).where('location.lat', '<=', 52.000);

虽然我认为如果不在同一个字段上,你就不能再链式调用更多的.where

你可以尝试对其下面的location.lng进行类似的查询,然后将两个查询的用户进行比较和匹配。或者在代码中检查location.lng是否在所需范围内,并过滤掉那些用户。无论哪种情况,你最终都会从数据库中获取比所需结果更多的数据,然后丢弃其中一些。


4
谢谢您的建议。我认为这就是我要采取的方法。有两个问题,然后从两个问题中获取匹配的结果。随着我遇到的每个问题,Google Firebase 越来越令人失望。 - Paul Strupeikis
我对Firestore的感觉也是如此。从表面上看,它比Firebase有了很大的改进,但如果你想在深度嵌套的数据库中执行更复杂的查询,它就会变得混乱不堪。 - Bart

0
也许解决这个问题的方法是创建一个云函数,在每个文档进入 Firebase 时添加一个 lat_rangelon_range 字段?不过你需要预定义范围,这样你才知道可以查询什么。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接