Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase数据库:如何获取每个列表的第一条记录_Javascript_Firebase_Firebase Realtime Database - Fatal编程技术网

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

Javascript Firebase数据库:如何获取每个列表的第一条记录,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我有一个嵌套的firebase数据库,其结构如下: posts: { 0: { title: "...", content: '...', comments: [{ by: "someone" }, { by: "anotherone" }] }, 1: {

我有一个嵌套的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: {
      ...
    }
}

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

看看这个链接,文章在结构中的位置是什么?