javascript - Firebase 数据库 : how to get first record of each list

标签 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。那么有谁知道出了什么问题或者是不可能这样查询吗?

最佳答案

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/

相关文章:

javascript - ajax 向/从 Controller MVC 发送和获取数据

用于验证地址的 JavaScript 正则表达式

json - Firebase 错误 : Data requested exceeds the maximum size that can be accessed with a single request

javascript - firebase多位置更新用户身份验证和数据库

java - 如何在 Firebase 中添加图像列表?

javascript - JavaScript 中的自定义事件与简单地调用常规函数有何不同?

javascript - 根据下拉选择使输入字段成为必填项

firebase - Flutter Firestore StreamTransformer DocumentSnapshot错误

java - 为什么我的 android studio 应用程序在运行时会跳过登录和注册页面?

swift - 区分记录更改和 Firebase 中删除的数据