如何更新Firebase对象中的对象图?

时间:2017-01-26 10:33:52

标签: javascript firebase-realtime-database angularfire2

新手在这里!

所以我使用的是Firebase。我基本上有这种浓缩结构。我通过尝试遵循我所读过的内容(没有数组等)来实现这种结构。

我有一个用户对象需要包含一个东西列表。所以我最终在数据库中得到了这样的东西。

{
   name: "clark"
   friends: {
       billyTheKid: true,
       butcherOfBakersfield: true
   }
}

当我添加一位朋友时,我正在这样做(再次原谅可怜的名字)

this.$firebaseUserObserver.update({
  friends: {
    [friendID]: true
  }
});

当我执行此操作并返回到我的示例时,BillyTheKid将被删除并替换为ButcherOfBakersfield

尽管使用set我觉得我得到update行为所以我必须错误地处理结构。

有人能为我提供指导吗?

2 个答案:

答案 0 :(得分:2)

在ref上调用update(),迭代传入的对象的属性,然后为每个对象调用set()。所以你确实用每次通话取代了friends

正确的解决方案是在树中的正确级别调用update()

this.$firebaseUserObserver.child('friends').update({
    [friendID]: true
});

但在这种情况下甚至不需要,您可以为特定朋友设置电话set()

this.$firebaseUserObserver.child('friends').child(friendId).set(true);

答案 1 :(得分:1)

如果在执行 .update 之前进入一个级别会发生什么?防爆。

$firebaseUserObserver.$ref.child("friends").update({ [friendId]: true})

我认为update语句基本上替换了节点的每个子节点,而不是替换.set所做的整个节点。基本上它对每个孩子都有一套。因此,它只能在结构中向下一层。