Для сортировки данных лучше полагаться на базу данных (бэкэнд), чем на внешний интерфейс (особенно если у вас большое количество записей).
Находясь в Firestore, вы можете сортировать в порядке возрастания или убывания (см. https://firebase.google.com/docs/firestore/query-data/order-limit-data), это невозможно в базе данных реального времени (orderByChild()
сортирует только в порядке возрастания).
Поскольку id
является числовым значением, один из возможных подходов для базы данных в реальном времени состоит в дублировании ваших данных и сохранении аддитивной инверсии значения идентификатора (т. Е. id
значение, умноженное на -1) в дополнительном поле с именем например sortingId
.
Тогда ваш запрос будет выглядеть так:
database.ref("players").orderByChild('sortingId').once('value', function(snapshot) {...}))
Чтобы обновить все существующие данные, используйте следующий код JavaScript:
var db = firebase.database();
var updates = {};
db.ref('players').once('value', function(snapshot) {
snapshot.forEach(function(childSnapshot) {
var childKey = childSnapshot.key;
var childData = childSnapshot.val();
console.log(childData);
updates['/players/' + childKey + '/sortingId'] =
parseInt(childSnapshot.val().id, 10) * -1;
});
db.ref().update(updates);
});