2016-11-27 154 views
1

我有一個Firebase節點結構,如下所示。Firebase數據按時間戳排序

categories 
    category1 
     timestamps 
      23c491sdfwrasddgasd: true 
      asdf8234dfjalskdask: true 
      39fsdizxcasfgbskdf7: true 
      2asqwizxov340bs9fms: true 
    category2 
     timestamps 
      p23491sdfwrasddgasd: true 
      asdfpovaskdrfskdask: true 
    category3 
     timestamps 
      vmk339ffk3rasddgasd: true 
      asdf8234dfjalskdvml: true 
      bnwdwizxcasfgbskdf7: true 

時間戳鍵是由push()生成的鍵。我需要按照他們擁有的最舊時間戳鍵對類別排序。只有來自時間戳節點的最早時間戳纔會被計數。

基本上我需要對它們進行第一次修改的時間進行排序。

歡迎任何幫助,包括重新設計節點的提示。

回答

1

你有沒有想過平坦化你的數據庫? 數據庫設計更改爲:

類別

category1 
    oldest_timestamp: 2asqwizxov340bs9fms 
    timestamps 
     23c491sdfwrasddgasd: true 
     asdf8234dfjalskdask: true 
     39fsdizxcasfgbskdf7: true 
     2asqwizxov340bs9fms: true 
    category2 
    oldest_timestamp: asdfpovaskdrfskdask 
    timestamps 
     p23491sdfwrasddgasd: true 
     asdfpovaskdrfskdask: true 
    category3 
    oldest_timestamp: bnwdwizxcasfgbskdf7 
    timestamps 
     vmk339ffk3rasddgasd: true 
     asdf8234dfjalskdvml: true 
     bnwdwizxcasfgbskdf7: true 

基本上你添加了一個名爲 「oldest_timestamp」 節點。現在您可以輕鬆地通過查詢來訂購您的類別。

Query myquery = FirebaseDatabase.getInstance().getReference().child("categories").orderByChild("oldest_timestamp"); 

不要忘記在Firebase數據庫規則中將其編入索引,以獲得更好的性能。

+0

目前我每次修改類別時都會推送一個值。如何檢測類別是否已被修改?我必須首先使用值偵聽器來檢查類別嗎? –

+0

是的,您可以使用ValueEventListener並在時間戳位置使用dataSnapshot.exists()。但很難說,因爲我不知道應用程序的整個上下文 – Hhorn