2017-01-02 100 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