2016-08-22 117 views
1

因此,我正在構建一個使用Firebase的音樂平臺,用戶可以在其中上傳歌曲。當用戶登錄時,我將他們的數據保存在「usuarios」節點上。當他們上傳歌曲時,我會推送到「musicas」節點(usuarios的子節點)。 這樣,我知道誰上傳了歌曲。查詢關於firebase的網頁數據

但問題是:我想獲得上傳的所有最後15首歌曲的列表。我怎麼做?我的數據結構錯了嗎?

這裏是我的嘗試:

var musicsRef = firebase.database().ref('usuarios').orderByChild('musicas'); 
    musicsRef.on('value', function(snapshot) { 
    console.log(snapshot.child('musicas'); 
}); 

這裏是我的數據庫結構:enter image description here

回答

5

隨着火力地堡(與大多數NoSQL數據庫),你往往最終爲你的應用程序要消費方式建模數據它。所以,如果你需要找到最近上載歌曲的全局列表,你應該保持這樣一份清單:

songsByDate 
    $pushIdOfSong: true 

你會注意到,我們沒有保持一個真正的價值在此列表中。它只是每首歌曲的ID和一個true值。這叫做二級索引,所以命令我們explain it in our documentation on creating a scalable data structure

有了這一結構,你可以使用查詢:

var recents = ref.child('songsByDate').orderByKey().limitToLast(15); 
recents.on('child_added', function(snapshot) { 
    var key = snapshot.key; 
    // load the song by its key 
}); 

我強烈建議閱讀NoSQL data modeling這篇文章。