我的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;,如果没有交易它应该没有任何问题解决它
答案 0 :(得分:0)
我刚刚运行了基于您的最小代码段:
DatabaseReference dbRef = database.getReference("46503277");
HashMap<String, Object> paths = new HashMap<>();
paths.put("pics/key3", "url3");
dbRef.updateChildren(paths);
它将key3
添加到现有的key1
和key2
(请参阅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");