更新Firestore字段,但字段是一个变量。

11 浏览
0 Comments

更新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字段。有没有办法在不硬编码更新字段的情况下实现这一点?

0
0 Comments

在更新Firestore字段时,如果字段是一个变量,可能会遇到问题。解决方法是使用方括号来解决这个问题。具体代码如下:

[field]: updateValue

在这里,`field`是对象的属性或键,这样我们就不会混淆了。是的,你可以像你展示的那样,使用`ComputedPropertyName`作为对象字面量语法的一部分。但是这只适用于ES6版本的语法。

0
0 Comments

问题的原因是在使用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);
    });
}

0