javascript - Firestore:使用边界查询地理点(lessThan/moreThan)
问题描述
我想使用从地图中获取的边界框按地理点查询文档集合。我有界限:
北:50.730
东:-1.861
南部:50.700
西部:-1.893
这是我的实际文档结构(基于我希望它返回的值):
document: {
d: {
coordinates: GeoPoint [50.72, -1.87]
}
}
这是我正在尝试的,但它不起作用:
db
.collection('exploreMap')
.where('d.coordinates.latitude', '<=', NORTH)
.where('d.coordinates.latitude', '>=', SOUTH)
// .where('d.coordinates.longitude', '<=', EAST)
// .where('d.coordinates.longitude', '>=', WEST)
.limit(80)
.get()
它只返回一个空查询,没有错误。我已经尝试过 EAST/WEST 查询和 NORTH/SOUTH,结果都相同。
我知道我不能做一个完整的盒子查询,因为 Firestore 不支持多个字段的 .where(),所以做一个简单的纬度或经度查询就可以了。然后我可以在返回结果时手动过滤。
有人可以告诉我我做错了什么吗?
解决方案
我还没有找到一种方法来查询经度或纬度。但是,如果您GeoPoint
使用正确的纬度进行创作,它对我有用。
这将返回我的集合中纬度在 35 到 40 之间的所有文档:
var NORTH = new firebase.firestore.GeoPoint(40, 0);
var SOUTH = new firebase.firestore.GeoPoint(35, 0);
db
.collection('10k')
.where('location', '<=', NORTH)
.where('location', '>=', SOUTH)
工作示例:https ://jsbin.com/yatisun/edit?js,console
由于 Firestore 先按纬度排序地理点,然后再按经度排序,因此您不能仅按经度进行过滤。一旦知道要返回的纬度的确切值(所以不是范围),您只能过滤经度。
推荐阅读
- concourse - 大厅资源缓存刷新
- android - 为什么我看不到 /storage 的内容
- java - 从请求标头 Spring Boot 中读取 POJO
- ios - Swift - 获取 ipv6 链接本地地址?
- apache-kafka - 有多少个连接/订阅可以处理 Kafka KSQL?
- python - 如何实现对象的嵌套属性,如 pandas series.str.find()
- java - 使用来自外部 jar 文件的类覆盖 Spring Boot 应用程序中的类
- ios - 在 Swift 4 中的两个 TableViewController 之间传递数据不起作用
- ios - performSegue 到 ViewController 后未加载活动指示器
- node.js - Express 不发送 JSON,但可以正常发送其他字符串