我的Firebase DB的结构如下:
user
- userId
- pics
- "key1" - "url1"
- "key2" - "url2"现在,我想向同一个用户添加一个新图片。所以我使用updateChildren()。
HashMap<String, String> paths = new HashMap<>();
paths.put("/user/<userId>/pics/key3", "url3");
dbRef.updateChildren(paths);因为没有"key3",所以期望它应该添加一个具有新值的新节点。但是,它不是添加,而是同时删除旧节点。所以在执行结束时,我只有一张照片,而不是3张。
我知道我们可以使用transaction来解决这个问题,但为了解决这个问题,我们需要将整个数据下载到客户端并重新上传。在没有事务的情况下,有什么替代方案吗?
此外,事务是为了避免同步更新的SME子,因为我没有任何子“用户-用户I pics-key3”,它应该没有任何问题解决它没有事务。
发布于 2017-09-30 21:54:00
我只是根据你的代码运行了这个最小的代码片段:
DatabaseReference dbRef = database.getReference("46503277");
HashMap<String, Object> paths = new HashMap<>();
paths.put("pics/key3", "url3");
dbRef.updateChildren(paths);它还在现有的key1和key2中添加了key3 (参见here)。如果这没有发生在你身上,那么一定有其他事情在发生。
发布于 2017-09-30 21:54:01
updateChildren会更新所有子节点。因此,当没有值时,它将使用null进行更新。你可以在这里使用setValue()方法。
dbRef.child("/user/<userId>/pics/key3").setValue("url3");发布于 2017-09-30 22:02:51
尝尝这个。
mDatabase.child("user").child(userId).child("pics").child("key3").setValue("url3");https://stackoverflow.com/questions/46503277
复制相似问题