【问题标题】:Add data to every child in Firebase向 Firebase 中的每个孩子添加数据
【发布时间】:2018-04-06 17:39:05
【问题描述】:

所以情况是这样的。每个用户都有一个任务列表,其中一些任务在不同用户之间共享。这些用户有自己的共享任务的单独副本,但具有相同的任务 ID。现在我想为所有这些任务添加一个commentSectionId。显然,具有相同任务 ID 的任务应该具有相同的 commentSectionId。 现在,这可以通过查询主父节点并对其进行迭代并一一设置值来轻松完成。但我不想下载整个用户数据。有没有其他方法可以做到这一点。

【问题讨论】:

    标签: javascript firebase firebase-realtime-database google-cloud-functions


    【解决方案1】:

    您可以通过创建对该节点的引用然后在其上调用update(newData) 来将数据添加到现有节点。例如

    var ref = firebase.database.ref("/UserTasks/uidOfAUser/idOfATask");
    ref.update({ comments: {
      "-Ldsfjklfdsgsd": {
        auth: "hiten pannu",
        text: "This is a comment"
      },
      "-Ldsfjklfdsgzz": {
        auth: "puf",
        text: "This is a response"
      }
    });
    

    如您所见,这不会加载任务的数据。但它确实要求您知道用户的 UID 和您尝试更新的任务的 ID。

    【讨论】:

    • 感谢您的评论,弗兰克。但这是用户和任务不具体的真正问题所以,我必须遍历所有用户和任务并检查该任务是否分配有任何评论 ID。如果那是任务没有任何commentSectionId,我必须检查本地地图,如果我们将任何commentSectionId 分配给该任务ID。
    • 我想出了两种方法。 1. 我在 Firebase 中维护一个 RelationShip 节点,我只是将 taskId 与 CommentSectionId 映射 2. 我导出数据库运行上述评论中描述的逻辑并将其导入 firebase。因为我的客户群大约有 5000 人,而且他们都属于同一个时区。我认为这不会造成太大问题。你有什么建议?
    • 第一种方法听起来像是双向数据映射,这在 NoSQL 数据库中很常见。第二种方法听起来像一个 ETL 管道,然后再次将数据导入回来。当您在外部系统中修改数据时,这似乎存在数据更改的风险,这似乎是个坏主意。再说一遍:任何一个都可以工作,这意味着这是您更熟悉的内容以及您认为最适合您的系统前进的个人偏好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2012-08-01
    • 2017-07-13
    • 2017-02-22
    相关资源
    最近更新 更多