2013-12-16 25 views
4

我想在一個操作中使用firebase的update()更新許多孩子。 爲此,我傳遞了要更改值的對象。Firebase - 如何更新許多孩子,而不是刪除AngularFire中的其他人

這裏是的console.log的輸出(angular.toJson(變化,1))

{ 
    "10": { 
    "otherRubies": 30 
    }, 
    "11": { 
    "otherRubies": 30 
    } 
} 

在開始的時候我有:

enter image description here 那麼我:

var refUsers = new Firebase(FBURL).child('users/'); 
refUsers.update(change); 

所以我想擁有:

enter image description here

的,而是我得到:

enter image description here

有沒有辦法做到這一點?

+0

你嘗試更新操作 –

+0

是的,對不起,我錯了粘貼版本......不正常,但仍然沒有n工作 –

+0

我不確定您的示例中角或角火焰如何參與? – Kato

回答

5

更新不是遞歸操作。所以它是在子路徑上設置的。如果您在用戶/處調用更新,則說不要刪除用戶/下的任何不在我的數據中的任何密鑰,但是當您想說時,不要刪除用戶/的子記錄中的任何密鑰。

相反,遍歷每個記錄和呼叫更新:

var refUsers = new Firebase(FBURL).child('users/'); 
for(key in change) { 
    if(change.hasOwnProperty(key)) { 
     refUsers.child(key).update(change[key]); 
    } 
} 
+0

否,這必須在一次操作中完成。交易將是現在的理想選擇。 –

+0

但是關於遞歸操作的解釋非常好,thx –

0

隨着火力地堡3,您可以通過書面形式更新:

update = {}; 
update['10/otherRubies'] = 30; 
update['11/otherRubies'] = 30; 
refUsers.update(change); 

更新數據的這種方式是不是在文檔,但它爲我工作。

0

這是遞歸更新的樣本:

function updateRecursively(path, value) { 
    for (let key in value) { 
    if (value[key] instanceof Object) { 
     updateRecursively(`${path}/${key}`, value[key]); 
    } else { 
     firebase.database().ref(`${path}/${key}`).set(value[key]); 
    } 
    } 
} 

用法:

updateRecursively('users', { 
    "10": { 
    "otherRubies": 30 
    }, 
    "11": { 
    "otherRubies": 30 
    } 
}) 
相關問題