我有一个嵌套的 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
。那么有谁知道出了什么问题或者是不可能这样查询吗?
最佳答案
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: {
...
}
}
每当发布新评论时,您都需要更新此列表(除了原始评论列表之外)。但作为返回,阅读每篇文章的最新评论现在非常便宜。
关于javascript - Firebase 数据库 : how to get first record of each list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47532894/