2017-01-02 70 views
0

有没有任何方法可以去除子删除。 DB结构为:Firebase子删除

users:{ 
    a: { 
    friends: { 
     b:Jhon, 
     c:Ted 
    }, 
    b: { 
    friends: { 
     a: Tom 
    } 
    }, 
    c: { 
    friends:{ 
     a: Tom 
    } 
    } 
} 

我想任何人的同时去除任何朋友的孩子得到的事件。 将活动附加到每个用户不是一个好方法。
我在Node.js的管理

+1

如何附加'child_changed'事件?每次更改/更新每个孩子(或用户)的数据时,都会触发该事件。 – Wilik

+0

@Wilik在你的方式我必须保持所有数据在一个变量,并在每一个变化得到什么改变。 我不高效 –

+0

好,那么唯一的办法就是每个'userid/friends'只附加'child_removed'事件,你的代码无论如何都在服务器上 – Wilik

回答

0

这里努力是另一种方式,你可以创建一个“朋友删除请求”的特殊节点,所以客户端只写这个节点,那么服务器处理删除。

首先,看一下这个数据库结构

{ 
    users: { 
     a: { 
      friends: { 
       b:Jhon, 
       c:Ted 
      }, 
     } 
     b: { 
      friends: { 
       a: Tom 
      } 
     }, 
     c: { 
      friends:{ 
       a: Tom 
      } 
     } 
    } 
    friend_removal_request : { 
     <push_id>: { 
      first_user: a, 
      second_user: b 
     } 
    } 
} 
  • 服务器连接child_added监听到friend_removal_request
  • 如果用户想要删除他们的朋友,他们的客户写了一个新的条目(通过使用DatabaseReference.push()方法)至friend_removal_requestfirst_user是用户的ID,second_user是他们的朋友的ID
  • 然后在服务器上的监听器将被解雇,服务器现在可以继续通过设置null值删除他们的友谊(或叫remove()),以/users/$first_user/friends/$second_user/users/$second_user_user/friends/$first_user
  • 删除好友后,服务器删除该请求snapshot.ref.remove()

现在,侦听器只附加到一个节点。

这是我的想法,让我知道如果你有这个方法的另一个问题。 希望这有助于:)

+0

好主意(y)我会解决它 –

+0

真棒,这也是一种防止一致性,以防万一服务器宕机:) – Wilik

相关问题