La consulta de bases de datos en time real de Firebase no funciona

Estoy usando la database en time real de Firebase en mi proyecto de Android. Mi esquema de database como a continuación:

esquema de base

Quiero get los mejores 10 puntajes. Mi consulta:

val query = reference.child("users").orderByChild("score").limitToFirst(10) query.addValueEventListener(object : ValueEventListener { override fun onCancelled(p0: DatabaseError) {} override fun onDataChange(dataSnapshot: DataSnapshot) { dataSnapshot.children.forEach { val score: String = it.child(Constants.scoreKey).value as String Log.i(TAG,"score:"+score) } } }) 

Espero ver los mejores 10 puntajes en logcat. Pero no fue así. Veo puntuaciones aleatorias. ¿Cuál es mi error?

Para resolver esto, cambie el tipo de campo de score de String a int o long , de lo contrario, el order se realiza lexicographically .

No hay ningún operador en Firebase y, por lo que sé, ni en otras bases de datos que te permitan cambiar este comportamiento. En cambio, deberá modificar los datos para get el comportamiento que desea. Si desea ir con el valor de Cadena, almacene los valores que están en el order que los necesita cuando se orderan lexicográficamente. Para los numbers puedes lograr eso rellenando con ceros:

Como ejemplo:

  • "0131" // cero agregado antes
  • "0132" // cero agregado antes
  • ……
  • "1308"
  • "1309"
  • "1310"
  • "1311"
  • ¿Por qué enlazar objects de búfer de OpenGL?
  • ¿Cómo se ejecuta el método de suspensión a través de la reflexión?
  • ¿Qué funciones de Kotlin no están disponibles en Groovy estáticamente comstackdo?
  • ¿Cómo se ejecutan las testings de Spek con Maven?
  • Error en findViewById después de la actualización para comstackr la versión sdk
  • editText get text kotlin
  • ¿Cuál es la forma idiomática de clonar un MutableMap?
  • El controller de exception Spring Boot @ControllerAdvice no se activa
  • Definición de class no encontrada en el código de Kotlin
  • ¿Por qué es lenta la primera computación en mi aplicación de Android, mientras que todos los cálculos posteriores son rápidos?
  • Location.distanceTo devuelve valor en metros pero necesito pies