Firesbase orderByChild не работает с отметкой времени - PullRequest
0 голосов
/ 03 марта 2020

Я хочу использовать orderByChild для отметки времени.
Но это не очень хорошо работает. Они даже сортируются по возрастанию или убыванию.

Вот результат:

  • Первый: 1581952308253
  • Второй: 1581671445437
  • Последний: 1583254605108

enter image description here

А вот мой код:

 toolboxesRef.orderByChild('timestamp').once('value', snapshot => {
    res.json(snapshot.val())
 })

Я знаю, я мог бы использовать массив, чтобы определить, данные должны сортировать по возрастанию или по убыванию.
Но знайте, что даже не сортирует. Кто-нибудь знает проблему?

1 Ответ

1 голос
/ 03 марта 2020

Порядок свойств в объекте JSON не определен. Поэтому, как только вы вызовете snapshot.val(), порядок дочерних узлов теряется.

Для поддержания порядка используйте snapshot.forEach() до l oop над дочерними узлами:

toolboxesRef.orderByChild('timestamp').once('value', snapshot => {
  snapshot.forEach(child => {
    console.log(child.val())
  })
})

Итак, если вы хотите вернуть ключи и значения в res, вам нужно преобразовать снимок в массив:

toolboxesRef.orderByChild('timestamp').once('value', snapshot => {
  let response = [];
  snapshot.forEach(child => {
    response.push({ key: child.key, value: child.val() });
  })
  res.json(response);
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...