Swift Vapor查询过滤和按距离排序

ikfrs5lh  于 2023-08-02  发布在  Swift
关注(0)|答案(1)|浏览(182)

我在做雨燕蒸汽计划。我需要过滤和排序用户的距离(它不应该超过100公里,第一个用户应该是最近的)。我有经纬度坐标。我需要专门对查询方法、过滤器和排序进行优化。我该怎么办?
我用的是PostgreSQL db。

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()

个字符

vlju58qv

vlju58qv1#

我在Vapor官方GitHub上问了同样的问题。我推荐了brokenhandsio/fluent-postgis framework。它为FluentPostgreSQL和Vapor提供了Swift PostGIS支持,这对我很有帮助。
这是FluentPostGIS包的一个分支,它增加了对地理查询的支持。FluentPostGIS为fluent-postgres-driverVapor 4提供PostGIS支持。

相关问题