Web端Firestore动态更新文档:字段名变量赋值问题求助
解决Firestore动态字段名更新的问题
当然可行!你遇到的是JavaScript对象字面量的一个常见小坑:直接写{ field: value }时,field会被当作字符串字面量,而不是变量引用。下面给你两种简单的解决办法,以及完整的通用函数示例:
方法1:ES6计算属性名(推荐)
ES6及以上版本支持用方括号包裹变量来动态定义对象的键,直接在update方法里使用即可:
var collection = "people"; var document = "john"; var value = 5; var field = "result"; var docRef= db.collection(collection).doc(document); // 用[field]代替field,让变量值作为字段名 return docRef.update({ [field]: value }) .then(function() { console.log("Document successfully updated!"); }) .catch(function(error) { console.error("Error updating document: ", error); });
方法2:ES5兼容写法
如果需要兼容ES5环境,可以先创建空对象,再通过方括号语法赋值:
var collection = "people"; var document = "john"; var value = 5; var field = "result"; var docRef= db.collection(collection).doc(document); // 先创建空对象,再动态添加字段 var updateData = {}; updateData[field] = value; return docRef.update(updateData) .then(function() { console.log("Document successfully updated!"); }) .catch(function(error) { console.error("Error updating document: ", error); });
完整通用函数示例
把逻辑封装成通用函数,接收四个参数即可:
function updateFirestoreField(collectionName, docId, fieldName, fieldValue) { const docRef = db.collection(collectionName).doc(docId); return docRef.update({ [fieldName]: fieldValue }) .then(() => { console.log(`Successfully updated field "${fieldName}" in document ${docId}`); return true; }) .catch((error) => { console.error(`Error updating document ${docId}:`, error); throw error; // 抛出错误让调用方处理 }); } // 使用示例 updateFirestoreField("people", "john", "result", 5) .then(() => { /* 后续逻辑 */ }) .catch((err) => { /* 错误处理 */ });
这样不管你要更新哪个集合、文档、字段,直接调用这个函数传参就行啦!
内容的提问来源于stack exchange,提问作者spoky
相关产品推荐
相关产品推荐

