2017-03-27 107 views
0

我在Firebase中有一個用戶對象,我需要移動到同一棵樹上的另一個子節點。將Firebase對象移動/複製到另一個子節點

的結構,像這樣:

users -> male -> uid -> ......KVPs..objects...etc 
     -> female -> uid -> ......KVPs..objects...etc 

我需要保持按性別分開的用戶由於應用程序的性質。 如果用戶更改其性別,我想將所有的詳細信息移至所選的性別。

我嘗試過使用AngularFire(firebaseObject),但是當我試圖在firebase中設置它時,由於對象中存在鍵,它會引發錯誤。我嘗試使用JSON.stringify,angular.toJSON去除鑰匙,但沒有任何運氣!

我想知道有沒有更清潔或推薦的方法來做到這一點? 欣賞如果任何人有任何指示或可以協助無論如何。

非常感謝, 諾埃爾

回答

1

這其實是很容易

// firebase ref 
    desc.ref1 = new Firebase(desc.userRef+'/'+desc.oldGender+'/'+uid); 
    desc.ref2 = new Firebase(desc.userRef+'/'+desc.gender+'/'+uid); 

    desc.ref1.on("value", function(snapshot) { 
     console.log(snapshot.val()); 

     desc.ref2.set(snapshot.val()); 

    }, function (errorObject) { 
     console.log("The read failed: " + errorObject.code); 
    }); 
0

我真的建議周圍

users 
    uid_0 
    name: "some name" 
    gender: "male" 
    loc: "US" 
    uid_1 
    name: "another name" 
    gender: "female" 
    loc: "FR" 

它仍然提供性別分離改變結構而不是移動節點但要更改名稱,性別,位置或其他內容的靈活性,而不必讀取,刪除和重寫現有數據。

這對於查詢和向每個用戶添加附加數據也更爲靈活。

我可能不會爲這個用例工作,但在大圖中這是最佳實踐。

0

感謝您的回覆。我原本是這樣的,我仍然在UID下捕捉到性別,但我想分開男性和女性。我的應用程序用於約會,所以我認爲基於首選性別屬性進行搜索會更高效。我認爲最初要搜索的節點減少了50%。如果您對此有任何建議,我很樂意聽到,因爲我不太瞭解Firebase/JSON的性能最佳做法。

我打算髮布用於複製和清理的代碼,因爲這可能對某人有用。我在'開啓'偵聽器時遇到問題,它正在刪除兩個節點。將其更改爲'曾經'解決它。

// firebase refs 
    desc.ref1 = new Firebase(desc.userRef+'/'+desc.oldGender+'/'+uid); 
    desc.ref2 = new Firebase(desc.userRef+'/'+desc.gender+'/'+uid); 

// copy user object 
    desc.ref1.once("value", function(snapshot) { 

     // copy user data to new gender tree 
     desc.ref2.set(snapshot.val(), function(error) { 
      if (error) { 
       $log.info("could not copy user object." + error); 
      } else { 
       $log.info("user object copied successfully."); 

       // remove user object under old gender 
       desc.ref1.remove(desc.onComplete); 
      } 
     }); 
    }, function (errorObject) { 
     $log.info("The read failed: " + errorObject.code); 
    }); 
相關問題