Запрос базы данных Firebase real_time не работает

Я использую базу данных Firebase в реальном времени в своем проекте Android. Моя схема базы данных, как показано ниже:

схема базы данных

Я хочу получить 10 лучших баллов. Мой запрос:

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) } } }) 

Я надеюсь увидеть лучшие 10 баллов по логарифму. Но это не так. Я вижу случайные оценки. Какая у меня ошибка?

Чтобы решить эту проблему, измените тип поля вашего score от String до int или long , иначе заказ будет сделан lexicographically .

В Firebase нет оператора, и насколько я знаю, ни в других базах данных, которые позволяют вам изменять это поведение. Вместо этого вам нужно будет изменить данные, чтобы получить нужное поведение. Если вы хотите пойти со значением String, сохраните значения, которые находятся в том порядке, в котором они вам нужны, при сортировке лексикографически. Для чисел вы можете это сделать, заполнив их нулями:

В качестве примера:

  • "0131" // добавлен ноль до
  • «0132» // добавлен ноль до
  • ……
  • "1308"
  • "1309"
  • "1310"
  • "1311"