2017-07-12 65 views
1

我試圖做到這一點增加新的孩子:火力地堡在某些獨特的推ID

households { 
    householdID1 : { 
     address : "BLK 16, Woodlands Street" 
     accounts : { 
      accountID1 : true, 
      accountID2 : true, 
     } 
    } 
} 

但是,當我試圖插入,就變成這樣:

enter image description here

這裏是我的代碼:

var householdRef = firebase.database().ref('households'); 

var householdData = { 
    address : "Blk 164" 
} 

householdRef.push(householdData); 
var householdKey = householdRef.key; 
console.log(householdKey); 

var query = firebase.database().ref('accounts').orderByChild('email').equalTo('[email protected]'); 
query.once('value', data => { 
    data.forEach(userSnapshot => { 
     let userKey = userSnapshot.key; 
     console.log('userKey ' + userKey); 

     firebase.database().ref('households').child(householdKey).child('accounts').push().set({ 
      userKey : true, 
     }), (error) => { 
      if (error) { 
      console.log(error.message); 
      }else{ 
      // Success 
      } 
     } 
    }); 
}); 

我獲得了householdKey後,我試圖添加新的嵌套子在那個特定的家庭鑰匙孩子下。我首先通過帳戶記錄循環查找帳戶的唯一ID,然後繼續添加。但它最終變成了這樣的圖片。有任何想法嗎?

回答

0

如果您使用push()函數,則firebase將爲該子項生成一個新密鑰。

我不能調試,但我認爲這是解決方案:

var householdRef = firebase.database().ref('households'); 

var householdData = { 
    address : "Blk 164", 
}; 

householdRef.push(householdData); 
var householdKey = householdRef.key; 

var query = firebase.database().ref('accounts').orderByChild('email').equalTo('[email protected]'); 
query.once('value', data => { 
    data.forEach(userSnapshot => { 
     let userKey = userSnapshot.key; 

     firebase.database().ref('households').child(householdKey).child('accounts').update({ 
      [userKey] : true, 
     }), (error) => { 
      if (error) { 
      console.log(error.message); 
      }else{ 
      // Success 
      } 
     } 
    }); 
}); 
+0

非常感謝!有用!那麼push()和update()和userKey的[]之間有什麼區別? – hyperfkcb

+0

如果您使用push()函數,則firebase將爲該子項生成一個新密鑰。使用[],您可以從變量中設置一個鍵。 – SaroVin

+0

有沒有辦法讓userKey變成公共的?因爲我想在for循環之外使用它來更新另一個孩子 – hyperfkcb