【问题标题】:Firestore Queries Swift 4 for rangeFirestore 查询 Swift 4 的范围
【发布时间】:2023-03-16 21:56:01
【问题描述】:

我想快速提出与 Firestore 查询相关的问题。我的firestore结构如下:

目前我开发了一个搜索系统,用户可以根据team 过滤minmax 人员。以下是.collection("team")的查询

Firestore.firestore().collection("team")
.whereField("min", isGreaterThanOrEqualTo : filterMin)
.whereField("max", isLessThanOrEqualTo : filterMax)

预期:如果用户放置 filterMin = 0 和 filterMax = 600 将显示 team1team2 的数据,如果用户放置 filterMin = 3 和 filterMax = 500,则仅显示 @ 的数据将显示 987654334@。

但问题是如果我使用上面的代码,我会得到如下错误

'无效的查询。所有具有不等式的过滤器(小于, lessThanOrEqual、greaterThan 或 greaterThanOrEqual) 必须在 同一个领域。但是你在“min”和“max”上有不等式过滤器

我已经阅读了文档,但似乎对我没有多大帮助。我仍然是快速开发和火力基地的新手。谢谢你帮助我。

【问题讨论】:

  • 基本上,Cloud Firestore 目前不允许您进行该级别的过滤。一种解决方法可能是运行第一个 .whereField 查询,然后在获得文档后,为第二个查询过滤数组。

标签: swift firebase google-cloud-firestore


【解决方案1】:

Cloud Firestore 目前不允许您执行多个不等式过滤器。一种解决方法可能是运行第一个 .whereField 查询,然后在获得文档后,为第二个查询过滤数组。

    Firestore.firestore().collection("team")
    .whereField("min", isGreaterThanOrEqualTo : filterMin)
        .getDocuments { (snapshot, error) in
            if let snapshot = snapshot {
                for document in snapshot.documents {
                    let data = document.data()

                    //parse your data into an array of teams
                }
            }

            let filteredTeams = teams.filter { $0.max < filterMax }    
    }

【讨论】:

  • 嗨,感谢您的帮助,我已将数据解析为数组。现在,我应该如何处理常量filteredTeams
  • filteredTeams 应该包含您最初尝试查询的团队数组。那些具有 min > filterMin & max
  • Firestore 对查询的限制非常烦人。这使得 Google Firestore 无法用于大型项目
【解决方案2】:

你不能在多个字段上使用不等式运算符,你存在的字段要么是最小值,要么是最大值。 Firestore 仅支持一个不相等运算符(、=),然后支持任意数量的相等运算符(==)。

您可以在“复合查询”here 下阅读更多相关信息

【讨论】:

    猜你喜欢
    • 2019-11-06
    • 2019-08-16
    • 2018-04-10
    • 2020-07-08
    • 2020-03-19
    • 1970-01-01
    相关资源
    最近更新 更多