Firestore - Orderby по убыванию - PullRequest
0 голосов
/ 20 октября 2018

В моей базе данных Firestore у меня есть индекс поля no, тип данных является строкой, но он имеет данные типа 1, 2, 3 и т. Д.

collectionReference
     .orderBy("indexNo", Query.Direction.DESCENDING)

вывод в порядке до 9, после 9, т.е., для 10, 11, 12, данные отображаются 1, 10, 11, 12, 2, 3 и т. д.

Пожалуйста, помогите мне решить эту проблему, так как эти числа будут определять расположение элементов карты.в представлении переработчика.

Спасибо ...

Ответы [ 3 ]

0 голосов
/ 21 октября 2018

Если тип данных вашего свойства indexNo имеет тип String и если вы хотите упорядочить результат с помощью Query.Direction.DESCENDING, результат будет не ожидаемым, потому что при упорядочении строк результаты упорядочиваются лексикографически .Есть два способа решения этой проблемы.Первым из них будет изменение типа данных вашей собственности с String на number , что я лично рекомендую.

Это обычный порядок для чисел:

  • 1308
  • 1309
  • 1310
  • 1311

И это обычный порядок для строк:

  • "1308"
  • "1309"
  • "131"
  • "1310"

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

  • "0131" // ноль, добавленный до
  • "0132" // ноль, добавленный до
  • ......
  • "1308"
  • "1309"
  • "1310"
  • "1311"
0 голосов
/ 21 октября 2018

Лучше изменить тип данных со строки на целое число.Я это сделал.Спасибо за вашу поддержку.

0 голосов
/ 20 октября 2018

Порядок является лексикографическим, так как тип данных - строка.Думайте о числах как об алфавите.0 = A, 1 = B, 2 = C ... Сравнивая 9 и 10, подумайте об этом, как о сравнении слов «I» и «BA».В словаре, что вы ожидаете появиться первым?

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