【问题标题】:Firebase equalTo one property and orderBy anotherFirebase equalTo 一个属性和 orderBy 另一个
【发布时间】:2016-04-09 02:53:03
【问题描述】:

我几乎可以肯定我的问题仅使用 firebase 没有解决方案,但让我试试。 我必须让一个特定的节点按另一个值对其进行排序,更好地解释:我必须让所有孩子“empregado”按“数据”对它们进行排序。 这是我的数据:

"ponto" : {
"-KEggOdWvibrLfpptyfX" : {
  "data" : "04/04/2016",
  "empregado" : "-KEHl6qtSG7UkZU8Gi4t",
  "entradaM" : "07:03",
  "entradaT" : "12:01",
  "equipe" : "-KDYYDYMqc0l0irnOGjP",
  "horas" : "09:00",
  "horas100" : "",
  "horas50" : "",
  "obra" : "-KDcuiLXj8IgVB5RalLS",
  "observacao" : "tsts",
  "saidaM" : "11:01",
  "saidaT" : "17:00"
},
"-KEggYHd7bBkv04XSx2C" : {
  "data" : "05/04/2016",
  "empregado" : "-KEHl6qtSG7UkZU8Gi4t",
  "entradaM" : "07:01",
  "entradaT" : "12:02",
  "equipe" : "-KDYYDYMqc0l0irnOGjP",
  "horas" : "09:00",
  "horas100" : "",
  "horas50" : "01:00",
  "obra" : "-KDcuiLXj8IgVB5RalLS",
  "observacao" : "tsts",
  "saidaM" : "11:01",
  "saidaT" : "18:00"
},...more data with repeated key "empregado" and not repeated too

所以,我做到了:

ref.child("ponto").orderByChild("empregado").equalTo("-KEHl6qtSG7UkZU8Gi4t").on("child_added", function(snapshot) {
                        ponto = snapshot.val();});

我得到了数据,但我需要通过子“数据”来排序,所以我认为这可以通过类似的方式解决:

ref.child("ponto").orderByChild("data").orderByChild("empregado").equalTo("-KEHl6qtSG7UkZU8Gi4t").on("child_added", function(snapshot) {
                        ponto = snapshot.val();});

但它说我不能使用两次“orderByChild” 想法??? 从现在开始谢谢。

【问题讨论】:

标签: firebase firebase-realtime-database


【解决方案1】:

您是对的,您的 orderByChild 定义了您要查询的字段,因此它不能被使用两次。

此外,使用 04/04/2016 这样的日期可能会成为稍后排序的问题,因此您可能希望将它们存储为 20160404。

没有指定您的开发平台,但可以很容易地加载数据并在代码中排序。

作为一种解决方案,您可以使用组合索引

"-KEggOdWvibrLfpptyfX" : {
  "data" : "04/04/2016",
  "empregado" : "-KEHl6qtSG7UkZU8Gi4t",
  "entradaM" : "07:03",
  "entradaT" : "12:01",
  "equipe" : "-KDYYDYMqc0l0irnOGjP"
  "id_date_index": "-KDYYDYMqc0l0irnOGjP_20160404"
},
"-KEggYHd7bBkv04XSx2C" : {
  "data" : "05/04/2016",
  "empregado" : "-KEHl6qtSG7UkZU8Gi4t",
  "entradaM" : "07:01",
  "entradaT" : "12:02",
  "equipe" : "-KDYYDYMqc0l0irnOGjP"
  "id_date_index": "-KDYYDYMqc0l0irnOGjP_20160504"
}

那么您的查询将是

    ref.queryOrderedByChild("id_date_index").queryStartingAtValue("-KDYYDYMqc0l0irnOGjP_0")
        .observeEventType(.ChildAdded, withBlock: { snapshot in

        if ( snapshot.value is NSNull ) {
            print("not found)")

        } else {
            print(snapshot.value)
        }

    })

这里的概念是我们知道要查询什么,在本例中是“-KDYYDYMqc0l0irnOGjP_0”,所以它是静态的。

变量是日期,所以我们制作了一个将静态与变量结合起来的索引

静态变量

由于变量是数字的并且可以是连续的,我们使用 queryStartingAt 从零开始查询:

-KDYYDYMqc0l0irnOGjP_0

然后它将检索所有所需的节点,并按顺序排列它们。

【讨论】:

    猜你喜欢
    • 2017-06-07
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 2011-05-09
    • 2010-11-14
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多