2016-10-18 23 views
2

我有這樣什麼是正確的方式來存儲對象在firebase中以簡單的方式重新排序它們?

{"ids": [ 
     { 
     "id1": { 
      "name": "name1", 
      "lastname": "lastname1" 
     } 
     }, 
     { 
     "id2": { 
      "name": "name2", 
      "lastname": "lastname2" 
      } 
     }, 
     { 
     "id3": { 
      "name": "name3", 
      "lastname": "lastname3" 
     } 
     }, 
     { 
     "id4": { 
      "name": "name4", 
      "lastname": "lastname4" 
     } 
     } 
     ] 
    } 

名單然後,我檢索以及與此顯示出來:

import {Component} from '@angular/core'; 
    import {AngularFire, FirebaseListObservable} from 'angularfire2'; 

    @Component({ 
     selector: 'app', 
     templateUrl: ` 
     <ul> 
     <li *ngFor="let id of ids | async"> 
     {{ id.name }} 
     </li> 
     </ul> 
     `, 
    }) 
    class AppComponent { 
    ids: FirebaseListObservable<any>; 
     constructor(af: AngularFire) { 
     this.ids = af.database.list('/ids'); 
     } 
    } 

結果:

name1 
name2 
name3 
name4 

比方說,我想重新排序/移動一些物體,所以我得到這樣的結果:

name3 
name1 
name2 
name4 

什麼將是一種很好的方式來構建我的對象,以輕鬆實現這一目標? 我可以添加「訂單」屬性,更新它並通過「訂單」屬性排列查詢。

this.ids = af.database.list('/ids',{ 
      query: { 
    orderByChild: 'order' 
    } 
    }); 

或者我可以添加以前的id密鑰作爲屬性,但是如何顯示該列表,然後將「previous」屬性考慮在內?我想出瞭如何實現這一點以避免未來的可伸縮性問題。

回答

2

首先,您將不得不添加屬性以存儲訂單。

其次,你不應該將這個數據保存爲數組,因爲firebase將它作爲對象存儲。相反,你應該保存爲對象。

查看以下鏈接瞭解更多信息。

https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html

所以,你的火力數據庫應該像這樣。

"ids": { 
    "id1": { 
     "name": "name1", 
     "lastname": "lastname1", 
     "order": 1 
    }, 
    "id2": { 
     "name": "name2", 
     "lastname": "lastname2", 
     "order": 2 
    }, 
    "id3": { 
     "name": "name3", 
     "lastname": "lastname3", 
     "order": 3 
    }, 
    "id4": { 
     "name": "name4", 
     "lastname": "lastname4", 
     "order": 4 
    } 
} 

而你應該查詢order屬性。

+0

謝謝你,這是我正在考慮的解決方案,但迫使我更新每一個'id',當我刪除一個。我不確定當涉及到巨大的對象時,這是否是更新事物的適當方式。我正在考慮存儲對前一個'id'的引用,但無法弄清楚如何以預期順序檢索結果。 – johnerfx

+1

刪除時不需要更新任何內容。您的訂購仍保留。例如,您可以使用order來刪除對象:3.您將擁有order:1,2,4的對象,並且您的排序將起作用。爲什麼你必須更新刪除任何東西? –

+0

是的,沒錯。但是我可能想要創建另一個對象並將其放在第一位,所以自然而然地想要更新所有對象的順序。或者實際上將第一個命令設置爲<0。我只是不知道這是否應該走的路。爲了以防萬一,我還希望在排序方法中具有某種人類可讀的一致性。現在不能想到其他邊緣情況。 – johnerfx

相關問題