在firebase数据库上写入单个值而不删除现有值

时间:2017-12-04 15:24:32

标签: firebase firebase-realtime-database

我正在尝试在不删除现有数据库的情况下为我的数据库添加单个值,因为我需要它们。结构类似于/ user / fav_post / {post_id_1,post_id_2,...}。 " fav_post"最初是空的,随着时间的推移,用户会添加更多的fav_posts。

解决这个问题的一种方法是下载所有喜欢的帖子,将它们放在HashMap中,添加新帖子并将它们推送到数据库,但这似乎不是最优的。

所以我想要实现的是拥有所有最喜欢的帖子并将它们显示给用户。

 mDatabase.child("USERS")
       .child(currentUser.getUid())
       .child("favorites")
       .setValue(postID); 

编辑:最终结果应该是

最终的结果我想要那样 根

-User

--FavPosts

---postID1(String)

当用户收藏另一篇文章时,结果应该是这样的:

root
-User

--FavPosts

---postID1(String)

---postID2(String)

2 个答案:

答案 0 :(得分:2)

setValue()将覆盖该位置的全部内容。如果您只想添加或更新子值,请改用updateChildren()

答案 1 :(得分:2)

您正在寻找的是:无序的唯一值集合。在Firebase数据库中,您将帖子ID存储为密钥,并且(因为Firebase不允许您存储没有值的密钥)true作为值。

所以:

root: {
  User: {
    FavPosts: {
      postID1: true,
      postID2: true
    }
  }
}

您可以使用以下方式设置这些值:

 mDatabase.child("USERS")
       .child(currentUser.getUid())
       .child("favorites")
       .child(postID) 
       .setValue(true);