想知道如何使用一个函数(其中一些函数args是集合文档的值)来过滤文档的Firestore集合。
假设某些Firestore收集了以下格式的文档
{
pointOfInterest: "Some string label"
longitude: -100.123
latitude: 50.456
}
也有一些代码可以检索用户的地理坐标(在我的情况下是通过react-native),类似
const getCurrentLatLong = () => {
// do some stuff, then...
return { latitude: someNumber, longitude: someOtherNumber }
}
最终想做的是运行类似的东西
let currentLocation = getCurrentLatLong()
let filteredSet = firebase
.firestore()
.collection('MyCollection')
// filtering each individual document
.filter(function (document, currentLocation) {
let docLat = document.latitude
let docLong = document.longitude
return distance(
{latitude: docLat, longitude: docLong},
currentLocation)
< SOME_CONST_DISTANCE
})
所以最后得到的是集合中所有文档中与currentLocation的距离小于SOME_CONST_DISTANCE的一些filteredSet。
一些谷歌搜索导致了一些潜在的起点(https://stackoverflow.com/a/45359952/8236733和https://firebase.google.com/docs/reference/js/firebase.database.Query#on),但不确定如何使用链接中显示的内容。任何有关如何实现这一目标的建议或文档,将不胜感激。
答案 0 :(得分:1)
无法将函数传递到Cloud Firestore中,然后该函数用于过滤返回的文档。您要么需要传递静态值(例如要返回的经度和纬度),要么需要读取所有文档并使用客户端功能进行过滤。
您要尝试的操作被称为地理查询:根据文档到已知点的距离返回文档。不幸的是,即使功能支持geographical point data type,Cloud Firestore仍未内置该功能。可以自己构建它,尽管您应该意识到目前这种查询效率很低。
要了解更多有关此的信息:
答案 1 :(得分:1)
因此,如前所述,Firestore不支持本地地理查询。对于我一直在从事的一些开源工作来说,这有点可耻了。
https://github.com/mbramwell1/GeoFire-Android
不仅可以执行标准的Firestore查询,而且还可以按位置进行搜索。看看它可能会做什么。