【问题标题】:How do i add Object to Firebase RTDB如何将对象添加到 Firebase RTDB
【发布时间】:2021-11-23 03:00:56
【问题描述】:

您好,我在 RTDB 上有一个 JSON 文件,想添加一个新条目。我尝试使用 retool,但它一直在覆盖数据库。

假设我有这样的东西

"items" : [{"item" : "value"},{"item" : "value"}]

在 Firebase 控制台中,结构是这样的,其中第一个对象的 索引为 0,而对于其他对象,它会增加,分层。

我想添加新对象,以便最新添加的对象获得 Index 0

如何在不使用文本编辑器更新 JSON 然后重新上传的情况下完成此操作?

【问题讨论】:

    标签: json firebase firebase-realtime-database


    【解决方案1】:

    当您在 Firebase 实时数据库中存储像您这样的数组时,它最终会存储为:

    "items": {
      "0": { "item": "value" },
      "1": { "item": "value" }
    }
    

    如果您想在索引 0 中添加新项目,您必须:

    1. 将现有项目读入您的应用程序。
    2. 将当前项目 0 和 1 移动到索引 1 和 2。
    3. 在索引 0 处添加新项目。

    这在代码中并不是很难做到,但确实意味着:

    • 您需要阅读所有现有项目,随着列表的增长,这将变得令人望而却步。
    • 您需要use a transaction 来读取然后更新数组,这会限制并发性(它不会扩展到许多用户)并且意味着离线时无法执行操作。

    出于这些原因,Firebase 建议不要将数组用于列表结构,而是使用其内置的 push() operation 将项目附加到列表中。 push() 操作生成的唯一键可以防止上述问题。

    因此,使用push(),最新项目始终位于列表的末尾,这意味着您可以从那里读取它而不是索引 0,或者使用带有 limitToLast() 的查询来获取最新项目。

    我也推荐阅读:

    【讨论】:

    • 如果我有一个 JSON 文件并且想要相同的结果,我应该怎么做?
    • 如果您希望在导入后能够在 Firebase 中操作该数据中的数组,我建议您在导入过程中将它们转换为使用 push() 键。
    • 我不明白。使用 Web 控制台时,我没有该选项。你说的是命令行吗?这段代码会是什么样子?
    • 不,这需要您编写代码来读取 JSON 文件并调用 Firebase API 将其插入数据库。如果你用控制台导入一个数组,它会像我在我的 JSON sn-p 中显示的那样显示,并且我发现了所有问题。
    • 所以,我必须单独将所有“/refs”推送到数据库?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 2023-01-19
    • 2019-12-23
    • 1970-01-01
    • 2016-11-19
    • 2018-10-06
    相关资源
    最近更新 更多