FirebaseのRealtime DatabaseでorderByChildが効かない

FirebaseのRealtime DatabaseでorderByChildを使用しても順番に変化がなく、結構ハマったのでメモ。

firebase.database().ref(path).orderByChild('updateDate').once('value').then((snapshot) => {
  console.log(snapshot.val());
});

そもそも、オブジェクトは順序を保証しないから、snapshot.val()の対象がオブジェクトの場合、その時点でorderByChild()が意味をなさないというのが結論。

これを解決するには、配列にするしかない。

firebase.database().ref(path).orderByChild('updateDate').once('value').then((snapshot) => {
  let array = [];
  snapshot.forEach(child => {
    array = [...array, child.val()];
  });
  console.log(array);
});

配列であれば順序が保証されるため、問題ない。