2017-07-06 67 views
0

我無法按原樣返回firebase和javascript中desc順序的對象數組,並且返回原生狀態。我本質上是「加入」兩個firebase父母,然後將他們推入陣列。基於時間戳的desc順序的Firebase查詢

async loadChats(userId){ 

this.chatIdRef = firebase.database().ref("members"); 
this.chatIdRef.off(); 
this.chatsRef = firebase.database().ref("chats"); 
this.chatsRef.off(); 

items = []; 
this.chatIdRef.child(userId).on('child_added', snap => { 
this.chatsRef.child(snap.key).startAt().on('value', snapshot => { 

    items.push({ 
     receiverId: snap.val().userId, 
     timeStamp: snapshot.val().createdAt, 
     name: snap.val().userName, 
     key: snapshot.key 
    }); 

    this.setState({ 
    dataSource: this.state.dataSource.cloneWithRows(items) 
    }); 

    }); 
}); 
} 

我試過在我的查詢中使用「orderByChild('createdAt')」,但沒有運氣。

+0

Firebase數據庫查詢按升序返回項目。沒有內置的操作員來逆轉該訂單。您可以顛倒客戶端的結果,也可以將具有反向值(即-1 *時間戳)的屬性添加到數據模型中。 –

+0

有關此問題的以前的問題:https://stackoverflow.com/q/25611356,https://stackoverflow.com/q/38548406,https://stackoverflow.com/q/34156996或任何[此結果列表(http://stackoverflow.com/search?q=%5Bfirebase-database%5D+descending)。 –

+0

使用負面時間戳完美。謝謝 – Neil

回答

0

從火力地堡文檔,與orderByChild返回列表查詢,按以下順序: -

兒童指定的子鍵空值是第一位的。

接下來是指定子鍵的值爲false的子項。如果多個孩子的值爲假,他們按鍵按字典順序排序。

接下來是指定子鍵的值爲true的子項。如果多個孩子的值爲true,則按鍵按字典順序排序。

接下來是帶數值的孩子,按升序排序。如果多個子項對於指定的子節點具有相同的數值,則按鍵排序。

字符串出現在數字之後,按照字典順序按升序排列。如果多個子項對於指定的子節點具有相同的值,則它們按鍵按字典順序排序。

對象最後一個按鍵按升序排列按字典順序排列。

所以,從以上,請注意,當您的數據有數值,它是在上升順序返回。現在您已知道數據的檢索順序,您可以對客戶端應用程序進行更改以反向顯示數據(按降序排列)。也許會扭轉你的名單或類似的東西?