更新Firestore字段,但字段是一个变量。
更新Firestore字段,但字段是一个变量。
在Firestore中,是否可以将要更新的字段作为变量传递?
我想创建一个函数来更新文档,例如...
updateFirebaseDocument('enquiries', 'asdaasdasds', 'status', '1')
使用以下函数:
export async function updateFirebaseDocument(collectionName, documentId, field, updateValue) { var doc = db.collection(collectionName).doc(documentId) return doc.update({ [field]: updateValue }) .then(function() { console.log("文档成功更新!"); }) .catch(function(error) { // 可能文档不存在。 console.error("更新文档时出错:", error); }); }
这段代码是有效的,但问题是它创建了一个名为"field"的字段,而不是更新status字段。有没有办法在不硬编码更新字段的情况下实现这一点?
问题的原因是在使用Firestore的update方法更新文档字段时,要更新的字段名是一个变量。在代码中,使用了ES6的语法来动态生成一个对象来更新字段。然而,这种方法可能会导致问题。
解决方法是使用方括号语法来更新字段。具体来说,将obj[field] = updateValue;
替换为obj[field] = updateValue;
。这样就可以正确更新Firestore中的字段。
完整的代码如下所示:
export async function updateFirebaseDocument(collectionName, documentId, field, updateValue) { var doc = db.collection(collectionName).doc(documentId) var obj = {} obj[field] = updateValue; return doc.update(obj) .then(function() { console.log("Document successfully updated!"); }) .catch(function(error) { // The document probably doesn't exist. console.error("Error updating document: ", error); }); }