如何在Firebase中已保存的数据之上保存数据?

时间:2016-12-11 17:55:08

标签: android firebase firebase-realtime-database

我将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

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

3 个答案:

答案 0 :(得分:1)

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

Work with Lists of Data on Android

如果您只想首先检索最后添加的记录,则可以添加数据附带的时间戳。还有一些方法可以让你最后记录一个集合。

答案 1 :(得分:1)

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

点击此处: How to sort value inside a Firebase child to the rest?

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

答案 2 :(得分:0)

您要做的是更新数据1。那么你要做的是,
获取要更新的节点的参考。

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()方法并再次推送数据!。