如何在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
相关产品推荐
相关产品推荐

