我几乎可以肯定我的问题没有使用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” 想法? 谢谢你。
答案 0 :(得分:0)
您是对的,您的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"所以这是静止的。
变量是日期,因此我们制作了一个将静态与变量
组合在一起的索引static_variable
由于变量是数字且可以是连续的,我们使用queryStartingAt从零开始查询:
-KDYYDYMqc0l0irnOGjP_0
然后将检索所有所需节点,并按顺序排序。