Swift 查找机场前缀的Firestore查询
结果应该是一个机场名称,位于距离iPhone当前位置3英里的纬度和经度范围之间,只是我在查询中得到了一个错误的机场 代码:Swift 查找机场前缀的Firestore查询,swift,google-cloud-firestore,Swift,Google Cloud Firestore,结果应该是一个机场名称,位于距离iPhone当前位置3英里的纬度和经度范围之间,只是我在查询中得到了一个错误的机场 代码: 此查询正确吗?您的代码有两个根本错误。首先,它实际上并没有查询您试图查询的内容,它所做的只是从机场集合中获取所有文档。第二个问题是,您似乎试图在多个字段上使用范围筛选器查询文档。范围筛选器必须在同一字段上进行所有查询 docRef是对集合的引用(因此它实际上应该被称为colRef),它不包含任何查询参数,这就是为什么查询不返回任何有意义的内容,因为它不完全是一个查询,它只是
此查询正确吗?您的代码有两个根本错误。首先,它实际上并没有查询您试图查询的内容,它所做的只是从机场集合中获取所有文档。第二个问题是,您似乎试图在多个字段上使用范围筛选器查询文档。范围筛选器必须在同一字段上进行所有查询
docRef
是对集合的引用(因此它实际上应该被称为colRef
),它不包含任何查询参数,这就是为什么查询不返回任何有意义的内容,因为它不完全是一个查询,它只是一个集合抓取
docRef.whereField("latitude", isGreaterThan: lowerLat).whereField("latitude", isLessThan: greaterLat)
docRef.whereField("longitude", isGreaterThan: lowerLon).whereField("longitude", isLessThan: greaterLon)
上面的两行实际上没有做任何事情,因为您已将docRef
声明为常量,并且从未尝试更改其值。你要找的是这样的东西:
let query = Firestore.firestore().collection("airport").whereField("latitude", isGreaterThan: lowerLat).whereField("latitude", isLessThan: greaterLat)
query.getDocuments { snapshot, error in
...
}
此代码将返回一组有意义的文档。但是,您不能在此查询中的其他字段上添加范围筛选器。当您使用范围过滤器
纬度
时,您已经使用了该查询中唯一可用的范围过滤器。非常感谢。我把它改成了Geohash。不,这很容易查询。不过还是谢谢你
let query = Firestore.firestore().collection("airport").whereField("latitude", isGreaterThan: lowerLat).whereField("latitude", isLessThan: greaterLat)
query.getDocuments { snapshot, error in
...
}