我将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
如何将新添加的数据保存在已保存的数据之上?请告诉我。
答案 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()方法并再次推送数据!。