1

我正在使用 Google Firestore 地理查询遵循此文档。使用 geohash 查询远处的文档效果很好。当我引入一个新条件时:`.whereField("createdOn", isGreaterThan: < value for time interval since 1970 7 days ago >)

这会引发一个错误,即字段上的任何不等式都必须将此字段作为第一个“OrderBy”参数。当我为此字段添加 order by 参数时,它不再返回仍在搜索距离内但未显示错误的文档。

甚至可以使用带有其他查询条件的 Firestore 地理查询吗?

我需要能够通过在特定时间范围内创建的对象来限制查询,否则这将返回大量文档。对这些后查询进行排序肯定会影响应用程序的性能。也许我错过了在 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)
4

1 回答 1

1

Firestore 只能过滤单个字段的范围。或者更简单:您的查询中只能有一个orderBy子句。

您正在尝试做的事情需要两个orderBy子句,一个 forgeohash和一个 for createdOn,这是不可能的。但是,如果您需要对第二个字段进行相等检查,那是可能的,因为 thstt 不需要orderBy子句。

我想知道的是您是否可以添加一个createdOnDay仅包含固定格式的日期部分的字段,createdOn然后in使用 7 个值执行该字段(对于过去一周的几天?

于 2021-04-01T22:01:39.487 回答