Firestore 查询问题。我的文档中有一个“geohash”字段,我想作为过滤依据。 我看过 Frank 的@puf 视频,内容是关于在 yt 上获取圆形 geohashes。现在我还不关心循环查询。 我有一个用户的 geohash。还有很多我想过滤的 10 个精确的 geohashes。
let userGeohash = "c2b2qd"
documentRef.whereField("geohash", isGreaterThanOrEqualTo: userGeohash)
我希望此查询返回比 userGeohash 更好的任何 geohashed。但它不会返回什么。
input = "c2b2qd"
expected output:
"c2b2qdh7rs"
"c2b2qdh2ht"
"c2b2qd3etr"
示例代码:
docRef.whereField("geohash", isGreaterThanOrEqualTo: "c2b2qdd").getDocuments { (query, error) in
query?.documents.forEach({ (snapshot) in
let data = snapshot.data()
print(data["geohash"] as! String)
})
}
// returns the following :
c2b2qddkc3q
c2b2qddkdcm
c2b2qddpydb
c2b2qehqtkg
c2b2qey3dje
c2b2qey4e62
c2b2qey4em1
c2b2qkp7cm0
u1hg7pzxs26
// expected output:
c2b2qddkc3q
c2b2qddkdcm
c2b2qddpydb
我什至尝试使用“aaaaaaaa”作为我的过滤器,它也返回所有文档。
最佳答案
您似乎误解了 Firebase 查询。您的查询返回一个开放式范围:
docRef.whereField("geohash", isGreaterThanOrEqualTo: "c2b2qdd")
具体来说,这个查询打开geohash
上的索引,它是按字典顺序排列的,它找到第一个以c2b2qdd
(或更大)开头的条目,然后返回所有从那时起的结果。所以这包括像 c2b2qehqtkg
这样的结果,因为它们大于或等于。
如果你想模拟一个开始于类型的操作,你需要使用一个封闭的范围查询,它也包括范围的结束条件。
docRef.whereField("geohash", isGreaterThanOrEqualTo: "c2b2qdd")
.whereField("geohash", isLessThan: "c2b2qde")
这将返回所有具有以 c2b2qdd
开头的 geohash
字段的文档。
关于swift - Firestore 查询 geohash 过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56283958/