Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 查找机场前缀的Firestore查询_Swift_Google Cloud Firestore - Fatal编程技术网

Swift 查找机场前缀的Firestore查询

Swift 查找机场前缀的Firestore查询,swift,google-cloud-firestore,Swift,Google Cloud Firestore,结果应该是一个机场名称,位于距离iPhone当前位置3英里的纬度和经度范围之间,只是我在查询中得到了一个错误的机场 代码: 此查询正确吗?您的代码有两个根本错误。首先,它实际上并没有查询您试图查询的内容,它所做的只是从机场集合中获取所有文档。第二个问题是,您似乎试图在多个字段上使用范围筛选器查询文档。范围筛选器必须在同一字段上进行所有查询 docRef是对集合的引用(因此它实际上应该被称为colRef),它不包含任何查询参数,这就是为什么查询不返回任何有意义的内容,因为它不完全是一个查询,它只是

结果应该是一个机场名称,位于距离iPhone当前位置3英里的纬度和经度范围之间,只是我在查询中得到了一个错误的机场

代码:


此查询正确吗?

您的代码有两个根本错误。首先,它实际上并没有查询您试图查询的内容,它所做的只是从机场集合中获取所有文档。第二个问题是,您似乎试图在多个字段上使用范围筛选器查询文档。范围筛选器必须在同一字段上进行所有查询

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
    ...
}