我有一个嵌套的firebase数据库,其结构如下:
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
。那么,是否有人知道什么是错的或是不可能这样查询?
答案 0 :(得分:1)
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: {
...
}
}
每当发布新评论时,您都需要更新此列表(除原始评论列表外)。但作为回报,阅读每篇文章的最新评论现在非常便宜。