所以我有以下firebase数据结构:

Games
    --- 20190220000_NCAA (SportID)
        --- WeekId : 1
        --- etc...
    --- 20190221000_NCAA
        --- WeekId : 2
        --- etc...
    --- 20190204000_NFL
        --- WeekId : 1
        --- etc...
    --- etc...(SportsID)

所以我想要达到的目标是:获得与周= 1相关的所有NCAA游戏

根据上面的示例,该结果仅应返回20190220000_NCAA。

我的查询如下:
gamesRef.queryOrderedByKey().queryStarting(atValue: "_NCAA").queryEnding(atValue: "_NCAA\u{f8ff}").queryOrdered(byChild: "WeekId").queryEqual(toValue: "1").observe(.value, with: { snapshot in

因此,如果我正确理解它,应该以_NCAA作为子字符串查询所有'Keys',然后还按Week id = 1排序结果,并以'_NCAA'作为子字符串?

问题在于它不会返回正确的结果。

有人对我如何实现查询有任何见解吗?

最佳答案

您显示的代码不应进行事件编译。 Firebase数据库查询只能包含一个orderBy...子句,并且不能进行后缀匹配(您的_NCAA在键的末尾)。

为了让您用例,您应该有一个包含星期编号和org(NCAA / NFL)值的键/属性。例如。

Games
    --- 20190220000_NCAA (SportID)
        --- WeekId : 1
        --- WeekOrg : "01_NCAA"
        --- etc...
    --- 20190221000_NCAA
        --- WeekId : 2
        --- WeekOrg : "02_NCAA"
        --- etc...
    --- 20190204000_NFL
        --- WeekId : 1
        --- WeekOrg : "01_NFL"
        --- etc...
    --- etc...(SportsID)

有了这个,您可以在第一周获得NCAA的节点,方法是:
gamesRef.queryOrdered(byChild: "WeekOrg").queryEqual(toValue: "01_NCAA").observe(.value, with: { snapshot in

也可以在这里查看我的答案:http://stackoverflow.com/questions/26700924/query-based-on-multiple-where-clauses-in-firebase

关于ios - 在Swift中对多个过滤器进行Firebase查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54798257/

10-15 22:24
查看更多