Firebase多路径更新

时间:2018-06-22 00:33:14

标签: javascript node.js firebase firebase-realtime-database nosql

我正在尝试更新2个独立的火力基地位置1.是患者列表,而2.是对该患者的评估列表。我创建了一个查找,列出了对该患者的所有评估

enter image description here

我一直在使用下面的代码来循环评估键,但是只有患者位置正在更新。请帮忙。

function updateLabel ({rootRef, uid, label}){
  var lookupRef = rootRef.child('evaluation_lookup/22')
  return lookupRef.once('value'). then(snap => {
    var evalKeys = Object.keys(snap.val())
    var updateObj = {}
    for (var i=0; i < evalKeys.length; i++) {
      var keys = evalKeys[i]
      updateObj['evaluation/22/keys/label'] = label
    }
    updateObj['patient/22/label'] = label
    return rootRef.update(updateObj)
  })
}
updateLabel ({
  rootRef: firebase.database().ref(),
  uid: '22',
  label: 'yetunde'
}).then(_=> {
  console.log('complete!')
}).catch(err => {
  console.error(err)
})

1 个答案:

答案 0 :(得分:0)

问题在于以下代码段:

for (var i=0; i < evalKeys.length; i++) {
  var keys = evalKeys[i]
  updateObj['evaluation/22/keys/label'] = label
}

每次通过此循环,您都在更新同一路径:evaluation/22/keys/label。您可能要在其中使用keys value ,所以:

  updateObj['evaluation/22/'+keys+'/label'] = label

或使用模板文字:

  updateObj[`evaluation/22/${keys}/label`] = label

作为其他更改,我建议使用Array.forEach()遍历键。甚至更好,请使用Firebase内置的Snapshot.forEach()

return lookupRef.once('value'). then(snap => {
  var updateObj = {}
  snap.forEach(function(child) {
    updateObj['evaluation/22/'+child.key+'/label'] = label
  }
  return rootRef.update(updateObj)
})