无法使用创建的日期字段在 google firestore 中通过 geohash 查询文档?
Not able to query documents by geohash in google firestore, using created date field?
我正在使用 Google Firestore 地理查询 Following this documentation。使用 geohash 查询一定距离内的文档效果很好。当我引入一个新条件时:`.whereField("createdOn", isGreaterThan: <value for time interval since 1970 7 days ago>)
这会抛出一条错误消息,字段上的任何不等式都必须将此字段作为第一个 'OrderBy' 参数。当我为此字段添加按参数排序时,它不再是 return 仍在搜索距离内但未显示错误的文档。
甚至可以使用带有附加查询条件的 firestore 地理查询吗?
我需要能够限制在特定时间范围内创建的对象的查询,否则这将 return 大量文档。对这些 post 查询进行排序肯定会影响应用程序性能。也许我缺少在 Firestore 中使用地理查询的更实用的方法?
let queryBounds = GFUtils.queryBounds(forLocation: center,
withRadius: distanceM)
//test
let ref = Ref().databaseJobs
let currentTime = NSDate().timeIntervalSince1970
let intervalLastWeek = currentTime - (10080 * 60)
print("current time is: \(currentTime) and 7 days ago interval was \(intervalLastWeek)")
ref.whereField("createdOn", isGreaterThan: intervalLastWeek)
let queries = queryBounds.compactMap { (any) -> Query? in
guard let bound = any as? GFGeoQueryBounds else { return nil }
return ref
.order(by: "geohash")
.start(at: [bound.startValue])
.end(at: [bound.endValue])
.whereField("createdOn", isGreaterThan: intervalLastWeek)
Firestore 只能对单个字段的范围进行过滤。或者更简单:查询中只能有一个 orderBy
子句。
您要执行的操作需要两个 orderBy
子句,一个用于 geohash
,一个用于 createdOn
,这是不可能的。如果您需要对第二个字段进行相等性检查,那将是可能的,因为 thstt 不需要 orderBy
子句。
我想知道您是否可以添加一个字段 createdOnDay
以固定格式仅包含 createdOn
的日期部分,然后对其执行 in
有 7 个值(对于过去一周的几天?
我正在使用 Google Firestore 地理查询 Following this documentation。使用 geohash 查询一定距离内的文档效果很好。当我引入一个新条件时:`.whereField("createdOn", isGreaterThan: <value for time interval since 1970 7 days ago>)
这会抛出一条错误消息,字段上的任何不等式都必须将此字段作为第一个 'OrderBy' 参数。当我为此字段添加按参数排序时,它不再是 return 仍在搜索距离内但未显示错误的文档。
甚至可以使用带有附加查询条件的 firestore 地理查询吗?
我需要能够限制在特定时间范围内创建的对象的查询,否则这将 return 大量文档。对这些 post 查询进行排序肯定会影响应用程序性能。也许我缺少在 Firestore 中使用地理查询的更实用的方法?
let queryBounds = GFUtils.queryBounds(forLocation: center,
withRadius: distanceM)
//test
let ref = Ref().databaseJobs
let currentTime = NSDate().timeIntervalSince1970
let intervalLastWeek = currentTime - (10080 * 60)
print("current time is: \(currentTime) and 7 days ago interval was \(intervalLastWeek)")
ref.whereField("createdOn", isGreaterThan: intervalLastWeek)
let queries = queryBounds.compactMap { (any) -> Query? in
guard let bound = any as? GFGeoQueryBounds else { return nil }
return ref
.order(by: "geohash")
.start(at: [bound.startValue])
.end(at: [bound.endValue])
.whereField("createdOn", isGreaterThan: intervalLastWeek)
Firestore 只能对单个字段的范围进行过滤。或者更简单:查询中只能有一个 orderBy
子句。
您要执行的操作需要两个 orderBy
子句,一个用于 geohash
,一个用于 createdOn
,这是不可能的。如果您需要对第二个字段进行相等性检查,那将是可能的,因为 thstt 不需要 orderBy
子句。
我想知道您是否可以添加一个字段 createdOnDay
以固定格式仅包含 createdOn
的日期部分,然后对其执行 in
有 7 个值(对于过去一周的几天?