Node.js Firebase托管:如何用变量键更新数据库指定字段
解决Firebase数据库指定字段更新问题
这个问题我之前也碰到过,核心原因是你在对象字面量里的写法没正确引用变量——直接写{ key: val }时,JavaScript会把key当成字符串字面量,而不是你传入的变量值,所以才会创建一个名为key的新字段,而非更新目标字段。
修正方案:使用ES6计算属性名
只需要把更新对象里的key用方括号[]包裹起来,这样JS就会解析变量的实际值作为键名:
update(id : string, key : string, val : string ) : void { const dbRef = firebaseAdmin.database().ref('datasets'); const entry = dbRef.child(id) entry.once('value', snap => { let content = snap.val() if ( content && content[key] ){ // 用方括号包裹key变量,解析为传入的实际字段名 entry.update({ [key]: val }) } }) }
额外优化:去掉不必要的数据库读取
其实你完全不需要先读取数据再判断字段是否存在,Firebase的update()方法本身就只会操作指定字段:字段存在就覆盖,不存在则创建(如果不需要创建新字段,再保留判断逻辑即可)。去掉读取操作能减少一次数据库请求,提升性能:
update(id : string, key : string, val : string ) : void { const entryRef = firebaseAdmin.database().ref(`datasets/${id}`); // 直接更新指定字段,无需提前读取 entryRef.update({ [key]: val }); }
现在调用update('-LDc9Wa4Wj1wzEx5CsKN', 'content', 'new content loresum'),就能正确覆盖content字段,不会生成新的key条目了。
内容的提问来源于stack exchange,提问作者xiaolingxiao
相关产品推荐
相关产品推荐

