我有一个嵌套的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
。那么,有没有人知道哪里出了问题,或者像这样查询是不可能的?
发布于 2017-11-28 22:46:58
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: {
...
}
}
只要有新的评论发布,你就需要更新这个列表(除了你原来的评论列表)。但作为回报,阅读每个帖子的最新评论现在非常便宜。
https://stackoverflow.com/questions/47532894
复制相似问题