Запросы в реальном времени Firebase startAt и endAt не работают так, как задумано для совместного свойства - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть совместное свойство для запроса нескольких значений одновременно.Это выглядит так:

enter image description here

А вот мой код запроса:

rootRef.child("leagues")
            .orderByChild("division_size")
            .startAt("1_1")
            .endAt("1_10")
            .addListenerForSingleValueEvent(object : ValueEventListener {
                override fun onDataChange(snapshot: DataSnapshot) {
                    if (snapshot.exists()) {
                        log.error("League Available")
                    } else {
                        log.error("League Not Available")
                    }
                }

                override fun onCancelled(error: DatabaseError) {
                    log.error("Failed to read value.", error.toException())
                }
            })

Обратите внимание на размер в "Division_size" startAtравно 1, а endAt равно 10. Это дает мне неверный результат, моментальный снимок не существует, когда я это делаю, но когда я переключаю размер endAt на 9 или любую одну цифру, он работает.

Как можноЯ делаю это, чтобы работать на всех цифрах, скажем, от 1 до 100?

1 Ответ

2 голосов
/ 27 сентября 2019

Проблема заключается в том, что строки сортируются в лексикографическом порядке .Строки не учитывают какие-либо числовые значения при сортировке, даже если строки могут содержать число.Они просто смотрят на значения UTF-8 (или ascii) отдельных символов.Ваши строки размера деления сортируются следующим образом:

  1. 1_1
  2. 1_10
  3. 1_2
  4. 1_21
  5. ...
  6. 1_9

Видите образец?Третий символ сортируется по значению ascii, а не по встроенному числу.

Я предлагаю использовать другую систему для сортировки дочерних элементов вашей базы данных, которая учитывает только числа, а не строки.Поскольку я не знаю свойств ваших строк Division_size, трудно что-то рекомендовать.Но я думаю, что вы можете выяснить, что вам нужно сделать вместо этого (и опять же, это не будет включать строки, только числа, возможно, с различными дочерними значениями).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...