【问题标题】:How to save data on top of the already saved data in Firebase?如何在 Firebase 中已保存的数据之上保存数据?
【发布时间】:2023-03-29 10:56:02
【问题描述】:

我将FirebaseDatabase 中的一些数据作为key:value 对保存在一个孩子下面。

问题是数据被保存为推送,例如如果data1 已经保存而不是data2 将保存在它下面。我想把它保存在这个已经保存的数据之上。

这是数据结构:

- branch
    - child
        - uniqueKey1: data1
        - uniqueKey2: data2

我正在使用此代码保存数据:

String key = mDatabase.child("branch").child("child").push().getKey();

mDatabase.child("branch").child("child").child(key).setValue(data);

我想要的是下面的结构

- branch
    - child
        - uniqueKey2: data2
        - uniqueKey1: data1

如何在已经保存的数据之上保存新添加的数据?请告诉我。

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    在您的 firebase 数据库中,节点中的子节点按字母顺序排列,无论您以何种顺序保存它们。 如果您想稍后按特定顺序检索它们,比如说按添加日期的顺序,您可能需要创建一个时间戳参考。

    检查这里: How to sort value inside a Firebase child to the rest?

    编辑:写我的答案时有很多答案和编辑过的问题,但正如其他人提到的,你不应该担心你在数据库中看到数据的顺序,你应该只关心提供正确的结构来正确检索数据. 正如我所说,在 DB 中,子节点按字母顺序排序,因此如果您坚持按添加日期排序,您应该想办法相应地更新密钥,然后更新整个节点。

    【讨论】:

    • 好的!如果我也保存timestamp,那么如何按降序检索?我的意思是timestamp 是最后一个?
    • 检查这个答案,我认为这正是你所需要的。 stackoverflow.com/questions/34156996/…
    • 嘿,我已经接受了这个答案,但我仍然遇到问题......我正在使用它来保存关注我的人的名字,问题是我正在保存它在关注我的人的uid 下,现在当我必须检索它时,我无法理解如何获取关注我的用户的uid。我该怎么办?
    【解决方案2】:

    我认为保存数据的顺序并不重要,只要您有一个策略可以按照您选择的顺序正确检索它。 Firebase 提供 API 来检索按键或值排序的数据。

    Work with Lists of Data on Android

    如果您只想先检索最后添加的记录,您可以在数据中添加时间戳。还有一些方法可以获取集合的最后一条记录。

    【讨论】:

    • 好的!但是有没有办法按我想要的顺序保存数据?
    • 我认为您可以做的是完全替换 child 节点并为其分配一个数组,其中子节点按您想要的顺序排列。
    • 如果我使用timestamp,那么如何以降序形式检索数据?就像上次保存的 timestamp 一样?
    【解决方案3】:

    您正在尝试做的是更新 data1。那么你要做的是,
    获取要更新的节点的引用。

    DatabaseReference ref = mDatabase.child("branch").child("child").child("data1");
    

    然后更新子节点。我假设data1下有一个孩子name,其值为'Foo'。现在你想更新它'Bar'。

    Hashmap<String, String> map = new Hashmap();
    map.put("name","Bar");
    
    ref.updateChildren(map);
    

    这是更新节点的方式。如果要完全替换节点,可以删除节点,调用removeValue()方法再次推送数据!

    【讨论】:

    • 没有。我不想删除或更新任何东西。我只需在data1 上方添加data2。就是这样!
    • 我不明白。你能具体解释一下你想要达到的目标吗?
    • 对于问题中的错误代码和结构,我深表歉意。请查看已编辑的问题。
    • 您要更新data1吗?什么是数据1?它包含什么价值?要具体。
    • 我希望编辑后的问题现在可以说清楚。请再看一遍,
    猜你喜欢
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    相关资源
    最近更新 更多