Сортировать данные базы данных по убыванию, используя отрицательную временную метку

выше скриншот моей базы данных Firebase. Я пытаюсь отсортировать данные Firebase в порядке убывания, используя отрицательную метку времени. Я использую следующую команду:

  const feedRef = database.ref('ducks')
  feedRef.orderByChild('timestamp').on('value', (snapshot, error) => {
    const feed = snapshot.val()})

Я продолжаю получать фид в том же порядке, что и база данных, а не в порядке убывания, как я хочу. Я думаю, что он не работает, потому что конечная точка уток не имеет отметки времени дочернего имени, как бы мне этого добиться? Есть ли у сгенерированных нажатием клавиш метки времени?

Ответы на вопрос(1)

Решение Вопроса

Когда вы звоните.val() на снимке он преобразуется в объект JSON. А ключи в объекте JavaScript по определению неупорядочены (хотя многие реализации будут повторять ключи в лексикографическом порядке).

Если вы выполняете запрос к базе данных Firebase, вы должны убедиться, что не конвертируете его в JSON, прежде чем получите элементы в правильном порядке. В вашем случае, используяDataSnapshot.forEach():

const feedRef = database.ref('ducks')
var feed = [];
feedRef.orderByChild('timestamp').on('value', (snapshot, error) => {
    snapshot.forEach((duckSnap) => {
        const duck = duckSnap.val()
        console.log(duckSnap.key+'='+duck.name);
        feed.push(duck);
    });
});
console.log(feed);
 jasan24 июл. 2016 г., 07:05
Я могу ошибаться, но это не должно быть duckSnap.val (). также, поскольку я перебираю снимок, я должен построить другой объект, передавая ему данные в нужном мне порядке?
 Frank van Puffelen24 июл. 2016 г., 17:22
snapshot.forEach() будет выполняться в правильном порядке. Но JSON неупорядочен. Так что если вы положите утки вfeed основываясь на ихchildSnapshot.key, результирующийfeed Объект снова будет неупорядоченным. Я расширил свой ответ, чтобы включить образец этого.
 Frank van Puffelen26 июл. 2016 г., 17:30
@jasan: внутри цикла он действительно должен использоватьсяduckSnap, Спасибо за указание на это, я исправил это сейчас (я не знаю, почему ваше редактирование было отклонено в обзоре).
 jasan24 июл. 2016 г., 07:20
Я попробовал следующее, и все еще порядок по-прежнемуdatabase.ref('ducks').orderByChild('timestamp').on('value', (snapshot, error) => { let feed = {} snapshot.forEach((childSnapshot) => { feed[childSnapshot.key] = childSnapshot.val() }) console.log('ducks feed: ', feed)

Ваш ответ на вопрос