Firestore查询范围

时间:2018-05-01 18:46:41

标签: swift firebase google-cloud-firestore

我想问一个与firestore查询swift相关的问题。我有如下的firestore结构:

enter image description here

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

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

预期:如果用户放置filterMin = 0且filterMax = 600,则会显示team1team2的数据,如果用户放置filterMin = 3且filterMax = 500,仅显示team2的数据。

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

  

'无效的查询。所有滤波器都有不等式(lessThan,   lessThanOrEqual,greaterThan或greaterThanOrEqual)必须在   相同的领域。但是你有“min' min'和' max''

我已经阅读了文档,但似乎对我没什么帮助。我在快速开发和firebase中仍然是新手。谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

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 }    
    }

答案 1 :(得分:0)

你不能在多个字段上有一个不等式运算符,你的字段是最小值或最大值。 Firestore仅支持一个inEquality运算符(&lt;,&gt;,&lt; =,&gt; =),然后支持任意数量的eqaulity运算符(==)。

您可以在&#39;复合查询&#39;下阅读更多相关信息。 here