Javascript Firebase数据库:如何获取每个列表的第一条记录
我有一个嵌套的firebase数据库,其结构如下:Javascript Firebase数据库:如何获取每个列表的第一条记录,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我有一个嵌套的firebase数据库,其结构如下: posts: { 0: { title: "...", content: '...', comments: [{ by: "someone" }, { by: "anotherone" }] }, 1: {
posts: {
0: {
title: "...",
content: '...',
comments: [{
by: "someone"
}, {
by: "anotherone"
}]
},
1: {
...
}
}
现在我想在每篇文章上获得第一条评论,所以我试着
firebase.database().ref('/posts/{postId}/comments/0').once('value',function(snapshot){
snapshot.forEach(function(child){ console.log(child.val());});
})
但我不知道为什么我在控制台中得到的唯一东西是
false
。那么,有没有人知道哪里出了问题,或者不可能进行这样的查询呢?Firebase数据库SDK也会读取整个节点。无法检索节点数据的子集或仅获取密钥
要获得每篇文章的第一条评论,你必须已经知道每篇文章的关键词。由于您不能仅读取帖子的键,这意味着您必须读取所有数据才能仅获取每篇帖子的第一条评论:
firebase.database().ref('/posts').once('value',function(snapshot){
snapshot.forEach(function(child){
console.log(child.val().comments[0]);
});
})
虽然这会提供您所需的结果,但这在带宽上是相当浪费的:客户机准备的数据远远超过您所需的数据量。与NoSQL数据库中的常见情况一样,更好的解决方案可能需要您更改数据模型以适合您的用例。例如:考虑在一个单独的顶级列表中存储每个帖子的最新评论:
latest-comments: {
0: {
by: "someone"
},
1: {
...
}
}
每当发布新评论时,您需要更新此列表(除了原始评论列表之外)。但是作为回报,阅读每篇文章的最新评论现在非常便宜。看看这个链接,文章在结构中的位置是什么?