无法使用创建的日期字段在 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 个值(对于过去一周的几天?