Firebase数据库:如何获取每个列表的第一条记录

时间:2017-11-28 13:34:23

标签: javascript firebase firebase-realtime-database

我有一个嵌套的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。那么,是否有人知道什么是错的或是不可能这样查询?

1 个答案:

答案 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: {
      ...
    }
}

每当发布新评论时,您都需要更新此列表(除原始评论列表外)。但作为回报,阅读每篇文章的最新评论现在非常便宜。