2016-08-22 62 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这篇文章。