updateChildren()删除旧数据

时间:2017-09-30 13:41:58

标签: java android firebase firebase-realtime-database

我的Firebase数据库具有以下结构:

user
-    userId
     -    pics
          -    "key1" - "url1"
          -    "key2" - "url2"

现在我想向同一个用户添加一张新图片。所以我使用的是updateChildren()。

HashMap<String, String> paths = new HashMap<>();
paths.put("/user/<userId>/pics/key3", "url3");
dbRef.updateChildren(paths);

由于没有&#34; key3&#34;所以期望它应该添加一个具有新值的新节点。但它不是添加,而是删除旧节点。所以在执行结束时,我只有一张pic而不是3张。

我知道我们可以使用事务来解决这个问题,但为此我们需要将整个数据下载到客户端并重新上传。没有交易可以做任何其他选择吗?

此外,交易是为了避免同时更新sme孩子,因为我没有任何孩子&#34; user-userId-pics-key3&#34;,如果没有交易它应该没有任何问题解决它

3 个答案:

答案 0 :(得分:0)

我刚刚运行了基于您的最小代码段:

DatabaseReference dbRef = database.getReference("46503277");
HashMap<String, Object> paths = new HashMap<>();
paths.put("pics/key3", "url3");
dbRef.updateChildren(paths);

它将key3添加到现有的key1key2(请参阅here)。如果这种情况没有发生,那么必须继续进行其他工作。

答案 1 :(得分:0)

updateChildren更新所有子节点。因此,当没有值时,它将使用null进行更新。您可以在此处使用setValue()方法。

dbRef.child("/user/<userId>/pics/key3").setValue("url3");

答案 2 :(得分:0)

试试这个。

mDatabase.child("user").child(userId).child("pics").child("key3").setValue("url3");