You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Firestore映射中用变量添加字段而非硬编码字段名

解决Firestore映射中使用变量作为字段名的问题

这个问题的核心是JavaScript对象字面量的属性名解析规则:当你直接写{x: y}时,JavaScript会把x当作字面量字符串作为属性名,而不是读取变量x的值。要让变量作为属性名,我们有两种常用方案:

方案1:使用ES6计算属性名

这是最简洁的方式,用方括号[]包裹变量,告诉JavaScript要计算这个变量的值作为属性名:

function testing(){
  var x = "44444"
  var y = "Cathy"
  var cityRef = db.collection('webQuiz').doc('12345');
  // 用[x]代替x,把变量值作为属性名
  var setWithMerge = cityRef.set({ people: {[x]: y} }, { merge: true });
}

方案2:提前构建更新对象

如果你的运行环境不支持ES6(虽然现在很少见),可以先创建一个空对象,再动态添加属性:

function testing(){
  var x = "44444"
  var y = "Cathy"
  var cityRef = db.collection('webQuiz').doc('12345');
  
  // 先构建要更新的people子对象
  const peopleUpdate = {};
  peopleUpdate[x] = y; // 这里变量x的值会作为属性名
  
  var setWithMerge = cityRef.set({ people: peopleUpdate }, { merge: true });
}

两种方案都能让Firestore正确识别变量x的值"44444"作为people映射的新字段名,最终得到你期望的结构:

people:{
  11111:"David", 
  22222:"Peter", 
  44444:"Cathy"
}

内容的提问来源于stack exchange,提问作者David Phillips

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:00:38