我正在从事 swift Vapor 项目。我需要按距离对用户进行过滤和排序(距离不应超过100公里,并且第一个用户应该是最近的)。我有坐标纬度和经度。我需要专门使用查询方法过滤和排序来实现此目的,以获得良好的优化。我该怎么做?
我正在使用 PostgreSQL 数据库。
func getAll(_ req: Request, arguments: UserFilter) async throws -> [User] {
let user = try req.auth.require(User.self)
var query = User.query(on: req.db)
arguments. filter(&query)
if let lat = user.latitude, let lon = user.longtitude {
query. filter(
User.self,
field: KeyPath<Schema, QueryableProperty>, // not yet provided
method: DatabaseQuery.Filter.Method, // not yet provided
value: Decodable & Encodable) // not yet provided
)
}
}
return try await query.all()
@OptionalField(key: "latitude")
var latitude: Float?
@OptionalField(key: "longtitude")
var longtitude: Float?
我在 Vapor 官方 GitHub 上问了同样的问题。有人推荐我这个框架。它帮助了我。