【问题标题】:firebase multi path updatefirebase 多路径更新
【发布时间】:2018-12-01 09:52:56
【问题描述】:

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

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

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)
})

【问题讨论】:

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


    【解决方案1】:

    问题出在这个sn-p:

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

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

      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)
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-12
      • 2017-11-13
      • 1970-01-01
      • 2020-04-15
      • 2017-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多