首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >updateChildren()删除旧数据

updateChildren()删除旧数据
EN

Stack Overflow用户
提问于 2017-09-30 21:41:58
回答 3查看 377关注 0票数 0

我的Firebase DB的结构如下:

代码语言:javascript
复制
user
-    userId
     -    pics
          -    "key1" - "url1"
          -    "key2" - "url2"

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

代码语言:javascript
复制
HashMap<String, String> paths = new HashMap<>();
paths.put("/user/<userId>/pics/key3", "url3");
dbRef.updateChildren(paths);

因为没有"key3",所以期望它应该添加一个具有新值的新节点。但是,它不是添加,而是同时删除旧节点。所以在执行结束时,我只有一张照片,而不是3张。

我知道我们可以使用transaction来解决这个问题,但为了解决这个问题,我们需要将整个数据下载到客户端并重新上传。在没有事务的情况下,有什么替代方案吗?

此外,事务是为了避免同步更新的SME子,因为我没有任何子“用户-用户I pics-key3”,它应该没有任何问题解决它没有事务。

EN

回答 3

Stack Overflow用户

发布于 2017-09-30 21:54:00

我只是根据你的代码运行了这个最小的代码片段:

代码语言:javascript
复制
DatabaseReference dbRef = database.getReference("46503277");
HashMap<String, Object> paths = new HashMap<>();
paths.put("pics/key3", "url3");
dbRef.updateChildren(paths);

它还在现有的key1key2中添加了key3 (参见here)。如果这没有发生在你身上,那么一定有其他事情在发生。

票数 1
EN

Stack Overflow用户

发布于 2017-09-30 21:54:01

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

代码语言:javascript
复制
dbRef.child("/user/<userId>/pics/key3").setValue("url3");
票数 0
EN

Stack Overflow用户

发布于 2017-09-30 22:02:51

尝尝这个。

代码语言:javascript
复制
mDatabase.child("user").child(userId).child("pics").child("key3").setValue("url3");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46503277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档