"users":{
    "steve_rodriquez":{
        "ch1":{
             "timestamp":2
        },
        "ch2":{
            "timestamp":1
        },
        "ch3":{
            "timestamp":4
        },
        "ch4":{
            "timestamp":3
        }
    }   
}

Las reglas se definen como

 "rules": {
    ".read": true,
    ".write": true,
    "users":{
         ".indexOn": ["timestamp"] 
    }
  }

Cuando trato de ordenar en función de la marca de tiempo, no funciona. agregué 1,2,3,4 solo por ejemplo

Este es mi código del lado del cliente.

ref = Database.database().reference()
        (ref.child("users").child("steve_rodriquez")).queryOrdered(byChild: "timestamp").observeSingleEvent(of: .value, with: {(snapshot) in
            print(snapshot.value as Any)
        })
1
j.doe 9 oct. 2019 a las 04:32

1 respuesta

La mejor respuesta

Cuando recuperas los datos de Firebase, la instantánea contiene las claves, los valores, y el orden de todos los nodos secundarios. Pero cuando llamas a snapshot.value, necesita convertir esto a Dictionary, que solo tiene espacio para las claves y los valores. Entonces, en este punto, se pierde la información sobre el orden de los nodos secundarios.

Para mantener el orden de los nodos secundarios, itera sobre snapshot.children como se muestra en la documentación en escuchando eventos secundarios y, por ejemplo, esta respuesta: Iterar sobre instantáneas secundarias en Firebase

2
Frank van Puffelen 9 oct. 2019 a las 03:25